Debutant cherche comment fait opperation sur "float"

chris37000 Messages postés 42 Date d'inscription vendredi 22 décembre 2000 Statut Membre Dernière intervention 12 décembre 2017 - 28 sept. 2008 à 19:05
chris37000 Messages postés 42 Date d'inscription vendredi 22 décembre 2000 Statut Membre Dernière intervention 12 décembre 2017 - 1 oct. 2008 à 19:27
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

cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
28 sept. 2008 à 19:28
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;
}
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
28 sept. 2008 à 19:33
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;
}
chris37000 Messages postés 42 Date d'inscription vendredi 22 décembre 2000 Statut Membre Dernière intervention 12 décembre 2017
28 sept. 2008 à 19:50
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.
chris37000 Messages postés 42 Date d'inscription vendredi 22 décembre 2000 Statut Membre Dernière intervention 12 décembre 2017
28 sept. 2008 à 20:20
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.

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
28 sept. 2008 à 22:28
Ouais, tu peux transformer le double n = 1;
en float n = 1;

Pour la fonction POW, elle calcule paramètre 1 paramètre 2  .
Spoolega Messages postés 65 Date d'inscription dimanche 8 janvier 2006 Statut Membre Dernière intervention 27 février 2011 1
1 oct. 2008 à 13:00
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) : >>   &  |

++
chris37000 Messages postés 42 Date d'inscription vendredi 22 décembre 2000 Statut Membre Dernière intervention 12 décembre 2017
1 oct. 2008 à 17:51
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.
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
1 oct. 2008 à 19: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))
chris37000 Messages postés 42 Date d'inscription vendredi 22 décembre 2000 Statut Membre Dernière intervention 12 décembre 2017
1 oct. 2008 à 19:27
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.
Rejoignez-nous