Problème math et programmation

C'est le lieu des discussions diverses et variées, mais toujours en rapport avec le thème général du forum et dans l'esprit de celui-ci. Contient des rubriques électroniques.

Modérateurs : Papy.G, fneck, Carl

Bernouilli92
Messages : 1254
Inscription : 24 déc. 2021 09:46
Localisation : Région parisienne

Re: Problème math et programmation

Message par Bernouilli92 »

Pour la seconde solution, je ne sais pas pourquoi j'ai donné cette formule.
Celle ci devrait fonctionner de la même manière :
i=int((input*8)/256)
o=int(2**i-1)
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Problème math et programmation

Message par __sam__ »

Pas tout à fait. L’entrée max vaut 255, donc input*8/256 vaudra au max 7.9xxx mais pas 8. Int() transformera ca en 7 max (arrondi vers le bas), et o vaudra 2**7-1, soit 127 ou 64 suivant les priorités entre ** et +. (Je pense que tu devrais ajouter des parenthèses pour être plus clair.)

Pour éviter ca il faut diviser par 255 et pas 256. Tu retombes alors sur ma formule :D
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Bernouilli92
Messages : 1254
Inscription : 24 déc. 2021 09:46
Localisation : Région parisienne

Re: Problème math et programmation

Message par Bernouilli92 »

Je me suis trompé en recopiant la formule dans le post.
Cela aurait dû être :
i=int((input*8)/256)
o=2**i

On a bien o=1 pour input=0 et o=128 pour input=255 et c'est équitablement réparti pour les valeurs de 0 à 255.
Avatar de l’utilisateur
gleike
Messages : 1341
Inscription : 16 oct. 2014 11:12
Localisation : Ludres (54710) Meurthe & Moselle

Re: Problème math et programmation

Message par gleike »

Je vais maintenant essayer de modifier la formule afin d'obtenir un barregraphe
à la place d'une seule LED qui se déplace,
ça ne devrait pas être trop dur, la suite à envoyer est 0,1,3,7,15,31,63,127.
Bernouilli92
Messages : 1254
Inscription : 24 déc. 2021 09:46
Localisation : Région parisienne

Re: Problème math et programmation

Message par Bernouilli92 »

i=1+int((input*8)/256)
o=(2**i)-1
Ce qui donne 1 pour les valeurs de 0 à 31, 3 pour les valeurs 32 à 63, 7 pour les valeurs 64 à 95, etc jusque 255 pour les valeurs 224 à 255.
Avatar de l’utilisateur
gleike
Messages : 1341
Inscription : 16 oct. 2014 11:12
Localisation : Ludres (54710) Meurthe & Moselle

Re: Problème math et programmation

Message par gleike »

Merci, j'ai même plus le temps de réfléchir, les réponses fusent à toutes allures :D
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Problème math et programmation

Message par __sam__ »

Bernouilli92 a écrit : 01 août 2022 23:40 Cela aurait dû être :
i=int((input*8)/256)
o=2**i

On a bien o=1 pour input=0 et o=128 pour input=255 et c'est équitablement réparti pour les valeurs de 0 à 255.
[edit: ceci était une bétise :
Ton int() fais donc un arrondi à l’entier le plus proche, et pas l’entier inférieur.
Ici tout dépend du Basic]
(le ** fait plutôt penser à du Python).

Par contre pour input=0, on voulait o=0.
Dernière modification par __sam__ le 02 août 2022 08:37, modifié 2 fois.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Problème math et programmation

Message par __sam__ »

Bernouilli92 a écrit : 02 août 2022 00:36 i=1+int((input*8)/256)
o=(2**i)-1
Ce qui donne 1 pour les valeurs de 0 à 31, 3 pour les valeurs 32 à 63, 7 pour les valeurs 64 à 95, etc jusque 255 pour les valeurs 224 à 255.
Ce qui fait 8 barres au total, or on en veut 9. Il manque la barre vide pour la première tranche. En utilisant le même langage dont la conversion entière se fait à l’entier le plus proche je ferais:

i=int((input*9)/256)
o=(2**i)-1

On retrouve bien il y a 9 barres différentes équi-réparties 0, 1, 3, 7, 15, 31, 63, 127, 255.

Neuf en tout, pas 8.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Bernouilli92
Messages : 1254
Inscription : 24 déc. 2021 09:46
Localisation : Région parisienne

Re: Problème math et programmation

Message par Bernouilli92 »

Int est la partie entière donc arrondi à l'entier juste en dessous.
Le ** est la fonction puissance. Elle est notée ** dans certains basic comme par exemple le zx81.
Pour input = 0 on doit avoir o=1 si on considère qu'il doit y avoir toujours une diode allumée. Il y a 8 possibilités.

Si on veut 9 possibilités dont toutes les diodes éteintes, alors il faut utiliser 9 comme multiplicateur et réutiliser la formule précédente. Ce qui donnerait :
i=int((input*9)/256)
o=(2**i)-1

Cela donne 28 ou 29 cas pour chacune de 9 possibilités de diodes.

Édit : tu as répondu pendant que j'écrivais mon message.
Oui. Mais tout dépend de si on veut avoir 8 ou 9 possibilités de diodes.
Répondre