Exercice
- itasoft
- Mi homme - Mi automate
- Messages : 7037
- Inscription : 20 oct. 2015, 10:15
- Localisation : Lyon
- Contact :
Exercice
slts,
un petit exercice pour se détendre (ou se prendre la tête, LOL)
cliquer dessus pour agrandir
un petit exercice pour se détendre (ou se prendre la tête, LOL)
cliquer dessus pour agrandir
Automaticien privé (de tout)
itasoft@free.fr
itasoft@free.fr
Re: Exercice
Quelle est cette fonction LOG? Jamais vue.
Edit: Et si y'a plusieurs bits à un? :p
Edit: Et si y'a plusieurs bits à un? :p
2e année BTS CRSA
- itasoft
- Mi homme - Mi automate
- Messages : 7037
- Inscription : 20 oct. 2015, 10:15
- Localisation : Lyon
- Contact :
Re: Exercice
slts,
c'est valable que si ya un seul bit à 1
c'est valable que si ya un seul bit à 1
Automaticien privé (de tout)
itasoft@free.fr
itasoft@free.fr
Re: Exercice
hello,
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
@+
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
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
Allez, c'est bien parce que c'est les vacances...
Code : Tout sélectionner
%MW1:= REAL_TO_INT (1.4427 *LN( INT_TO_REAL (%MW0) ) );
- itasoft
- Mi homme - Mi automate
- Messages : 7037
- Inscription : 20 oct. 2015, 10:15
- Localisation : Lyon
- Contact :
Re: Exercice
bien, pas trouvé de quoi dérive la constante 1.4427 , c'est pas la racine de 2 ?ProfnovA a écrit : ↑02 août 2018, 08:31 Allez, c'est bien parce que c'est les vacances...
Code : Tout sélectionner
%MW1:= REAL_TO_INT (1.4427 *LN( INT_TO_REAL (%MW0) ) );
Automaticien privé (de tout)
itasoft@free.fr
itasoft@free.fr
Re: Exercice
Honnêtement, j'ai fait une courbe de tendance excel, c'est pas beau de tricher...itasoft a écrit : ↑02 août 2018, 10:28bien, pas trouvé de quoi dérive la constante 1.4427 , c'est pas la racine de 2 ?ProfnovA a écrit : ↑02 août 2018, 08:31 Allez, c'est bien parce que c'est les vacances...
Code : Tout sélectionner
%MW1:= REAL_TO_INT (1.4427 *LN( INT_TO_REAL (%MW0) ) );
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.
- itasoft
- Mi homme - Mi automate
- Messages : 7037
- Inscription : 20 oct. 2015, 10:15
- Localisation : Lyon
- Contact :
Re: Exercice
slts,
exact, c'est la réciproque de la fonction , va falloir que je révise mes bouquins, lol
exact, c'est la réciproque de la fonction , va falloir que je révise mes bouquins, lol
Automaticien privé (de tout)
itasoft@free.fr
itasoft@free.fr
- itasoft
- Mi homme - Mi automate
- Messages : 7037
- Inscription : 20 oct. 2015, 10:15
- Localisation : Lyon
- Contact :
Re: Exercice
@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;
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;
Automaticien privé (de tout)
itasoft@free.fr
itasoft@free.fr