Annonce

Réduire
Aucune annonce.

[DEV] pour les nuls

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • Envoyé par HPMAN Voir le message
    Les deux, sur 4 octets pour float, 8 pour double.
    pour afficher la valeur d'un double, c'est %d, ou bien ?

    Je veux afficher une valeur de 0.04 (qui doit se modifier quand il y a collision), et ça me donne 1067743969 .

    Commentaire


    • zou

      Commentaire


      • ton lien ne donne rien .

        Je vais essayer tout l'alphabet, ça finira par fonctionner .

        Edit :

        le %f ne fonctionne pas.
        le %e ne fonctionne pas.
        le %lf ne fonctionne pas.
        le %0lf ne fonctionne pas.

        Mes valeurs :

        a=aparabole (double)=0.04
        h=hparabole(int)=100
        l=lparabole(int)=50


        Quand je met %d, j'ai ça :



        Par contre, la valeur en h est un entier (sur la photo, h vaut 100 et l vaut 50 !!).

        Quand je met %f, j'ai ça :



        mon code est celui-là :

        Code:
        textoutf(0, 23, 0, 0, "[COLOR="Lime"]a:%f[/COLOR] h:%d l:%d", aparabole, hparabole, lparabole);
        WTF ?

        le %f entraine-t-il une modification des %d qui le suivent ??

        !! BORDEL !!

        en comprant les 2 photos, je vois que sur la deuxième photo, lma valeur de l est celle de h sur la première, et celle de h sur la seconde est celle de a sur la première (un aspro pour tout le monde).

        Edit : j'ai compris, car il ne peut pas lire la valeur de aparabole, donc il lit la suivante.

        Donc pour l, ça va. Reste à résoudre a et h. Ces valeurs vont changer quand je changerai la hauteur et la largeur de la parabole de la balle. Il me faut donc ces valeurs en visuel pour voir si ça va fonctionner.
        Dernière modification par chacha, 18 août 2012, 08h24.

        Commentaire


        • J'ai mis une variable par ligne, et ça donne ça :



          h, c'est bon.

          l, c'est bon.

          a, c'est mort. J'ai mis %f pour l'afficher, mais rien n'y fait :( .


          J'ai refait un essai avec %d, et ça me donne toujours la même valeur ( 1067743969 ) ; c'est donc un problème de paramètre d'affichage .

          Ici, dans "AFFICHER LE CONTENU D'UNE VARIABLE", c'est bien %f pour un double (vers le mileu de la page). Alors ?

          Sans cette valeur, je ne peux pas avancer, car je dois savoir comment elle varie en fonction de ce que je fais (car ce que je fais en ce moment ne correspond pas à ce que ça doit faire, donc il y a une couille dans le potage...). HELP.

          Dernière info avant le WE : voici mon code pour les affichages des données :

          Code:
                          textoutf(0, 19, 0, 0, "xcolmin:%d", xcolmin);
          		textoutf(0, 20, 0, 0, "xcolmax:%d", xcolmax);
          		textoutf(0, 21, 0, 0, "h:%03d", hparabole);
          		textoutf(0, 22, 0, 0, "l:%03d", lparabole);
          		[COLOR="Lime"]textoutf(0, 23, 0, 0, "a:%f", aparabole);[/COLOR]
          		textoutf(0, 24, 0, 0, "posballeabsx :%03d posballerelx :%03d", posballeabsx, posballerelx);
          		textoutf(0, 25, 0, 0, "posballeabsy :%03d posballerely :%03d", posballeabsy, posballerely);
          		textoutf(0, 26, 0, 0, "i :%05d abx :%05d aby :%05d", i, abx, aby);
          		textoutf(0, 27, 0, 0, "Vbl Counter:%d", _vbl_count);
          Y-a-t-il un bug dedans ?

          EDIT :
          Dernière modification par chacha, 18 août 2012, 15h59.

          Commentaire


          • Oh bah déjà %x ne fonctionne pas dans cette lib, pourquoi pas %f non plus ?

            Commentaire


            • Que veux-tu dire ? Je ne peux pas afficher les double ?

              Commentaire


              • Essaie un float au lieu d'un double, mais ouais, y'a des choses qui fonctionnent pas.

                Plus qu'a l'afficher à la main

                Commentaire


                • J'essaierai demain matin avec un float, sinon, je considérerai que la valeur est celle que je pense.

                  Je pense de toute façon que mon pb de collision ne vient pas de cette valeur, mais je voulais en être sûr.

                  Commentaire


                  • Tu n'as pas de debugger?

                    Commentaire


                    • en fait, quand un prob de programmation existe, dans CMD de windows, ça te dit ou ça plante.

                      Mais là, pour cette valeur que je n'arrive pas à afficher correctement, ce n'est pas un prob de programmation, mais de terme; je pense donc qu'un débugger ne donnera rien.

                      (ou pas)

                      Commentaire


                      • Voici qques tests avec les nombre à virgule.

                        Code:
                        #include 
                        #include 
                        extern PALETTE palettes[];
                        int	main(void) {
                        	float valeur1 = 2.2f;
                        	float valeur2 = 2.4f;
                        	float valeur3 = 3.9f;
                        	
                        	[COLOR="SeaGreen"]/* Copy our palette into video hardware, palette no 1 */[/COLOR]
                        	setpalette(0, 256, (const PPALETTE)&palettes);
                        
                        	[COLOR="SeaGreen"]/* Boucle infinie */[/COLOR]
                        	while(1) {
                        	
                        		[COLOR="SeaGreen"]/* Attente de vbl */[/COLOR]
                        		wait_vbl();
                        		
                        		[COLOR="SeaGreen"] /* CAST: convertion exlplicite. Attention, pas d'arrondi, juste la partie entière */[/COLOR]
                        		textoutf(0,1, 0, 0,"valeur1 :%d",(int)valeur1);
                        		textoutf(0,2, 0, 0,"valeur2 :%d",(int)valeur2);
                        		textoutf(0,3, 0, 0,"valeur3 :%d",(int)valeur3);
                        		
                        [COLOR="SeaGreen"]		/* convertion implicite
                        		 * Valeur KO, affichage K0
                        		 */[/COLOR]
                        		textoutf(0,5, 0, 0,"integer :%d", valeur1);	
                        		
                        		[COLOR="SeaGreen"]/* Valeur OK, affichage K0 */[/COLOR]
                        		textoutf(0,6, 0, 0,"float   :%l", valeur1);			
                        		
                        [COLOR="SeaGreen"]		/*
                        		 * Bien que l'affichage soit faux, on peut quand même utiliser les floats,
                        		 * il suffit de ne pas les afficher :)
                        		 */[/COLOR]
                        		if(valeur1 > 2.1f) 
                        			textoutf(0,11, 0, 0,"Comparaison : OK => 2.2 > 2.1");
                        		else
                        			textoutf(0,11, 0, 0,"Comparaison : ERREUR");
                        		
                        		if(valeur2 * 4 == 9.6f) 
                        			textoutf(0,12, 0, 0,"Operation   : OK => 2.4 * 4 = 9.6");
                        		else
                        			textoutf(0,12, 0, 0,"Operation   : ERREUR");
                        	}	
                        	return 0;
                        }
                        Ce qui donne :



                        Résumé: les nombres à virgule fonctionnent tant que tu n'essaies pas des les afficher . Ce n'est pas vraiment un problème, on a rarement besoin d’afficher une valeur à virgule à l’écran, sauf pour debugger bien sur...

                        Commentaire


                        • EDIT :
                          Qques erreurs à eviter :
                          Code:
                          [COLOR="SeaGreen"]		/* 2.2f < (int)2.9f ???
                          		 * => FAUX !!!
                          		 */[/COLOR]
                          		if(valeur1 < (int)2.9f) 
                          			textoutf(0,13, 0, 0,"Comparaison : VRAI");
                          		else
                          			textoutf(0,13, 0, 0,"Comparaison : FAUX");
                          
                          [COLOR="SeaGreen"]		/* valeur1 == 2.2f ???
                          		 * => VRAI !!!
                          		 */[/COLOR]
                          		if(valeur1 == 2.2f) 
                          			textoutf(0,14, 0, 0,"Comparaison : VRAI");
                          		else
                          			textoutf(0,14, 0, 0,"Comparaison : FAUX");
                          [COLOR="SeaGreen"]
                          		/* 2.2f == 2.2 ???
                          		 * => FAUX !!!
                          		 */[/COLOR]
                          		if(2.2f == 2.2) 
                          			textoutf(0,15, 0, 0,"Comparaison : VRAI");
                          		else
                          			textoutf(0,15, 0, 0,"Comparaison : FAUX");
                          Comparaison : FAUX
                          Comparaison : VRAI
                          Comparaison : FAUX
                          Dernière modification par CeL, 20 août 2012, 15h34.

                          Commentaire


                          • J'ai réussi à "l'afficher", en créant une variable qui correspond à 1000 fois aparabole, et ça fonctionne : bizarre, car je créé un int=1000*a alors que a est un double. Faut faire gaffe je pense à ce que cette variable n'ai pas de virgule, quoi.

                            C'est bien ce que je pensais, ma variable ne se modifie pas alors qu'elle devrait.

                            Je cherche donc .

                            Commentaire


                            • Ouais, bon, en fait, c'est bizarre, ce pb d'affichage de double. J'ai laissé tomber son affichage, ça simplifie les choses.

                              Bref.

                              Je galère depuis une semaine aussi sur un pb :

                              je veux changer le déplacement de la balle en fonction de la touche qu'on utilise, lors d'un rebond. Depuis 7 jours, quand je fais un essai, la balle rebondit donc, mais en dehors de l'écran ! On ne voit que le haut de la parabole . N'importe quoi.

                              Je cherche, je cherche, mais rien à faire. Rien .

                              Cette aprèm', je regarde mes notes et je vois que j'ai arrondi une valeur de la parabole : 0.04 au lieu de 0.0037. Nouvel essai : ça fonctionne .



                              P'tain de programmation de brin, tiens.

                              Bon, j'ai encore 2 voir 3 problèmes à résoudre (lors du changement de trajectoire, la balle ne rebondit pas sur la raquette, mais ailleurs; je veux réinitialiser le rebond si on appuie sur aucune touche; les sons (à bon entendeur ).

                              Dès que j'ai fini ces points, je passe à autre chose...

                              Commentaire

                              Chargement...
                              X