Debutant cherche comment fait opperation sur "float"

Signaler
Messages postés
43
Date d'inscription
vendredi 22 décembre 2000
Statut
Membre
Dernière intervention
12 décembre 2017
-
Messages postés
43
Date d'inscription
vendredi 22 décembre 2000
Statut
Membre
Dernière intervention
12 décembre 2017
-
Bonjour a vous tous

On a un TP a faire au lycée pour simuler une guirlande de noël.
Un petit truc tout simple qui commande une boite avec 8 leds et il y a 8 entrées

Les leds sont commander avec des variables unsigned float de 0x01 à 0xff

J'ai fait mon 1er programme tout simple en boucle "while" qui incrémente  la variable de 1 et qui arriver a ff me réinitialise la variable a 0.
Cela marche impeccable même si c'est pas très jolie mais en faite vous l'aurez compris, cela ma représente l'incrementation binaire. de 00000000 jusqu'à 11111111.

Bon c'est pas très joli comme guirlande donc j'ai d'autre idée bien sur mais je débute et j'arrivais pas a faire une operation plus complexe de la variable
Par exemple
unsigned float LED;
si je fait LED=LED+1 cela marche c'est ce que j'ai fait pour mon 1er prog.

Mais si je fait LED=LED+LED ou LED*LED Ou même LED*2 cela marche pas.

J'ai essayé avec par exemple LED=LED*0x02     ou   LED=LED*0x2

Mais niete.

merci de votre aide j'aurais bien aimmer m'avancé un peut a la maison car je suis avec 2 loustiques en cours qui n'attende qu'une seule chose, c'est que j'ai fini mon prog du coup c'est pas facile a chercher tous seul. et j'ai pris un peut de retard par rapport a d'autre

C'est marant à 38 ans lorsque je suis arrivé en cours apres 1semaine et demi de retard par rapport a eux personne voulais se mettre avec moi mais maintenant qu'il voie que je veut y arriver il se rapproche pour demander conseil car biensur il on pas tout ecouter du cours que l'on a vu avant :)   Ha ces jeunes :)

Reprise des études après 17 ans pour un BTS IRIS.

9 réponses

Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
13
Peut-être comme ceci :

#include
#include <cmath>
#include <windows.h>

using namespace std;

int main()
{
    double n; int i;
    n=1;
    for (i=0;i<=10;i++)
    {
        n=pow(2,i);
        cout << n << endl;  //pour voir
        Sleep(500);         //    "
    }
    return 0;
}
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
13
Ou encore comme cela :

#include
using namespace std;

#include <windows.h>

int main()
{
    double n = 1;
    while (1)
    {
        cout << n << endl;  //pour voir
        Sleep(500);         //    "
        n*=2;
        if (n == 65536*2) n=1;
    }
    return 0;
}
Messages postés
43
Date d'inscription
vendredi 22 décembre 2000
Statut
Membre
Dernière intervention
12 décembre 2017

Merci pour la réponse

Il y a des truc que je connait pas encore la dedans

pow

et si non si je comprend bien "n" c'est donc m'a variable qui allumera mes Leds et on la déclare en "double" même si c'est une unsigned float qui m'est remonté.

En faite je cherche pas la sulution pour faire mon chenillard mais juste le moyen de faire des opération plus complexe que m'a variable+1 après je pourais l'integrer dans dans ce que je veut lui faire faire
Par exemple pour qu'elle s'allume les une a la suite des autres si je me trompe pas c'est ma variable Led*2.
Messages postés
43
Date d'inscription
vendredi 22 décembre 2000
Statut
Membre
Dernière intervention
12 décembre 2017

En faite pour faire fonctionner le boitier (ou un simulateur) on a juste a utilisé un tParIO.h qui nous est donner par le prof.

on sait que l'objet

tParIOEcrireLed( ) nous allume les leds en fonction de la variable que l'on lui donne
et
tParIOLireBP( ) nous permet de recuperer l'info des boutons par la variable BP.

On sait aussi que les variables à donner ou a récupérer sont de type "unsigned float"

Après on connait les objets pour le boitier ou le simulateur.
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
13
Ouais, tu peux transformer le double n = 1;
en float n = 1;

Pour la fonction POW, elle calcule paramètre 1 paramètre 2  .
Messages postés
65
Date d'inscription
dimanche 8 janvier 2006
Statut
Membre
Dernière intervention
27 février 2011
1
Bonjour,

Tu nous dis que tout ceci ne marche pas :
Mais si je fait LED=LED+LED ou LED*LED Ou même LED*2 cela marche pas.
J'ai essayé avec par exemple LED=LED*0x02     ou   LED=LED*0x2

Je me demande comment tu fais ton initialisation sur ta variable LED ?
Si tu l'init. à 0, LED ne changera jamais dans toutes ces opérations.

Une autre idée aussi, mais pour ce genre de chose (chenillar) il est peut être plus pratique de travailler au niveau des bits sur ta variable :

void main(void)
{
    unsigned float var = 1;  // ne pas init à 0, sinon, ça ne marche pas !

    for(int i = 0; i<10; i++)
        printf("%x\n", var = var << 1);  // affichage en hexa
}

Avec l'opérateur <<  on viens créer un décalage vers la gauche des bits de ta variable (cela reviens a faire une multiplication par 2). Tu peux t'amuser ainsi avec tous les autres (voir les opérateurs logiques) : >>   &  |

++
Messages postés
43
Date d'inscription
vendredi 22 décembre 2000
Statut
Membre
Dernière intervention
12 décembre 2017

Bonjour,

Je n'est rien compris, non pas par ce que vous m'avez gentillement dit mais par mon problème car en faite cela marche très bien.
Mais je vais changer de machine car elle m'a refait le coup cette après midi.

Donc comme je vous disait, l'opération Led*2 marchait pas mais Led+1 oui. Lorsque j'ai repris mon exo sans rien changer à mon programme cela a bien voulu compiler et je n'avais plus de défaut.
Et aujourd'hui on a repris la même base et elle ne marchait plus, J'ai rebouter le PC et denouveau c bon.

Si non pour le decalage des bit on a vu sa aujoud'hui et je l'ai pas utilisé car du coup j'ai fait 4 prog avec des boucles.

merci de votre aide

Reprise des études après 17 ans pour un BTS IRIS.
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
13
Oui mais ça doit commencer par un nombre x^2 (exemple 32).
Si tu commences par 6, ça ne marchera pas (en binaire, 110 (6) devient 1100 (12))
Messages postés
43
Date d'inscription
vendredi 22 décembre 2000
Statut
Membre
Dernière intervention
12 décembre 2017

Pour mon chenillard

J'ai simplement fait

        Led=1

         tant que (1)  // en boucle infini donc pour le moment

               Si Led <= 0x80
                    ecrireLed (Led)
                    Led*2
                    usleep (300000)
                si non
                    Led=1
           fin tant que

un truc comme sa et cela marche

Apres j'ai fait l'inverse en partant de 0x80
    

Reprise des études après 17 ans pour un BTS IRIS.