Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Autres questions


Index du Forum » Autres questions » Problèmes SDK divers et variés
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Problèmes SDK divers et variés

Posté le 26/10/2013 11:00

Salut j'ai fait un petit programme mais je comprends pas pourquoi la fonction Print ne veut pas afficher la chaine que je lui demande ...

Le code
Cliquer pour enrouler
#include "fxlib.h"
#include "stdio.h"

unsigned int key;
int caractere, caractere2;
char chaine[21];
char ident[21];
char domaine[30];
char mdp[30];
char destinataire[40];
char sujet[30];
char corps[50];


int AddIn_main(int isAppli, unsigned short OptionNum){
    Bdisp_AllClr_DDVRAM();
    demmarage();
    identif();
    
    return 1;
}

demmarage(){
    int key;
    Bdisp_AllClr_DDVRAM();
    PrintMini(80,58,"Version 1.0",0);
    Bdisp_DrawLineVRAM(10,10,10,50);
    Bdisp_DrawLineVRAM(10,50,117,50);
    Bdisp_DrawLineVRAM(117,50,117,10);
    Bdisp_DrawLineVRAM(10,10,117,10);
    Bdisp_DrawLineVRAM(10,10,63,25);
    Bdisp_DrawLineVRAM(117,10,63,25);
    locate(7,5);
    Print("Messagerie");
    do{
        GetKey(&key);
    } while(key != 30004);
    
    Bdisp_AllClr_DDVRAM();
}

identif(){
    Bdisp_AllClr_DDVRAM();
    locate(1,1);
    Print("Identifiant:");
    locate(1,2);
    Print("+------------------+");
    locate(1,3);
    Print("|                  |");
    locate(1,4);
    Print("+------------------+");
    remplichaine();
    
    caractere2=0;
    do{
        caractere2++;
        ident[caractere2] = chaine[caractere2];
    } while(caractere2+1 != caractere);
    ========================== > ICI < ========
    locate(2,3);
    Print(ident);
    do{
        GetKey(&key);
    } while(key != 30004);
    
}

remplichaine(){
    caractere=0;
    do{
        caractere++;
    ======================= > ET ICI < ========
        locate(2,3);
        Print(chaine);
        GetKey(&key);
        //==========Conversion==========
        if (key==48)key= 71;
        if (key==46)key= 61;
        if (key==15)key= 51;
        if (key==135)key= 41;
        if (key==30004)key= 31;
        if (key==49)key= 72;
        if (key==50)key= 62;
        if (key==51)key= 52;
        if (key==137)key= 42;
        if (key==153)key= 32;
        if (key==52)key= 73;
        if (key==53)key= 63;
        if (key==54)key= 53;
        if (key==169)key= 43;
        if (key==185)key= 33;
        if (key==55)key= 74;
        if (key==56)key= 64;
        if (key==57)key= 54;
        if (key==30025)key= 44;
        if (key==30015)key= 34;
        if (key==187)key= 75;
        if (key==30046)key= 65;
        if (key==40)key= 55;
        if (key==41)key= 45;
        if (key==44)key= 35;
        if (key==14)key= 25;
        if (key==30001)key= 76;
        if (key==149)key= 66;
        if (key==133)key= 56;
        if (key==129)key= 46;
        if (key==130)key= 36;
        if (key==131)key= 26;
        if (key==30007)key= 77;
        if (key==205)key= 67;
        if (key==168)key= 57;
        if (key==30002)key= 47;
        if (key==30023)key= 37;
        if (key==30021)key= 27;
        if (key==30006)key= 78;
        if (key==30008)key= 68;
        if (key==30016)key= 58;
        if (key==30020)key= 38;
        if (key==30018)key= 28;
        if (key==30009)key= 79;
        if (key==30010)key= 69;
        if (key==30011)key= 59;
        if (key==30012)key= 49;
        if (key==30013)key= 39;
        if (key==30014)key= 29;
        //==============================
        if(key==31)caractere=19;
        if(key==76)chaine[caractere]='a';
        if(key==66)chaine[caractere]='b';
        if(key==56)chaine[caractere]='c';
        if(key==46)chaine[caractere]='d';
        if(key==36)chaine[caractere]='e';
        if(key==26)chaine[caractere]='f';
        if(key==75)chaine[caractere]='g';
        if(key==65)chaine[caractere]='h';
        if(key==55)chaine[caractere]='i';
        if(key==45)chaine[caractere]='j';
        if(key==35)chaine[caractere]='k';
        if(key==25)chaine[caractere]='l';
        if(key==74)chaine[caractere]='m';
        if(key==64)chaine[caractere]='n';
        if(key==54)chaine[caractere]='o';
        if(key==73)chaine[caractere]='p';
        if(key==63)chaine[caractere]='q';
        if(key==53)chaine[caractere]='r';
        if(key==43)chaine[caractere]='s';
        if(key==33)chaine[caractere]='t';
        if(key==72)chaine[caractere]='u';
        if(key==62)chaine[caractere]='v';
        if(key==52)chaine[caractere]='w';
        if(key==42)chaine[caractere]='x';
        if(key==32)chaine[caractere]='y';
        if(key==71)chaine[caractere]='z';
        if(key==61)chaine[caractere]='.';
        if(key==57)chaine[caractere]='@';
    } while(caractere!=19);
    
    if(key==31)chaine[caractere]='\0';
    if(key!=31)chaine[caractere+1]='\0';
}


#pragma section _BR_Size
unsigned long BR_Size;
#pragma section
#pragma section _TOP
int InitializeSystem(int isAppli, unsigned short OptionNum){return INIT_ADDIN_APPLICATION(isAppli, OptionNum);}
#pragma section


la chaine ident fait 21 caracteres


Précédente 1, 2, 3 ··· 10, 11, 12, 13, 14, 15, 16, 17 ··· 20, 21, 22, 23 Suivante
Cartix Hors ligne Membre Points: 2748 Défis: 98 Message

Citer : Posté le 13/07/2014 16:15 | #


Math.log est bien le népérien ?
Et le (int) ne convient pas puisqu'il te faut un round et pas un floor
Lephenixnoir En ligne Administrateur Points: 24671 Défis: 170 Message

Citer : Posté le 13/07/2014 16:31 | #


(int)(n+.5) = round(n).
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 13/07/2014 18:22 | #


Oui math.log est bien le neperien
Mais apres en soit a part l'arrondi tout semble correct ? J'ai surtout peur que l'erreur vienne du type de variable...
Cartix Hors ligne Membre Points: 2748 Défis: 98 Message

Citer : Posté le 13/07/2014 18:32 | #


Lephenixnoir a écrit :
(int)(n+.5) = round(n).

Ah oui. Désolé, j'avais pas fait attention que le .5 n'était pas présent avant
Lephenixnoir En ligne Administrateur Points: 24671 Défis: 170 Message

Citer : Posté le 13/07/2014 18:37 | #


Essaie déjà avec l'arrondi.
On ne peut rien te dire sur le type de variable si tu ne nous donnes pas quelques infos supplémentaires...
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 13/07/2014 18:49 | #


Pour faire simple, je cherche a récupérer le nombre "difficulté" que l'on peut voir dans ce simulateur et qui dépend du Terrain de Chasse après la chasse. Par exemple la, pour une chasse avec un terrain avant l'attaque de 200 000 000 de 1 000, la difficulté devrait être de 162 031 or la fonction me retourne 81 486 858.
J'ai fait cette fonction, qui ne marche pas:
unsigned int diff_chasse(double tdc, double supplement)
{
    double difficulte;
    unsigned char buffer[50];
    
    difficulte = (supplement + (tdc + supplement) * 0.01) * (pow(1.04, (int)(log((tdc + supplement) / 50) / log(pow(10, 0.1)))+0.5)) * 3;
    
    sprintf(buffer,"%f", difficulte);
    PrintMini(0,0,buffer,0);
    ML_display_vram();
    Sleep(5000);
    
    return (unsigned int)(difficulte+0.5);
}

Je l’appelle comme ça:
diff_chasse(200000000,1000);

Les chiffres de l'appel peuvent être très grands mais toujours en entiers positifs.
Cartix Hors ligne Membre Points: 2748 Défis: 98 Message

Citer : Posté le 13/07/2014 18:51 | #


Peux-tu être plus explicite quand tu dis que ça ne marche pas ?
Et je suis d'accord avec LephenixNoir, le 0.5 doit être avancé d'une parenthèse
Lephenixnoir En ligne Administrateur Points: 24671 Défis: 170 Message

Citer : Posté le 13/07/2014 18:51 | #


Ben déjà, tu utilises du double et tu retournes de l'unsigned int, ça va pas trop aller.
Il n'y a pas de divisions quelconques, donc je pense que tu peux garder des entiers. Au moins, passe tout en unsigned int, tu y gagneras grandement en lisibilité -- mais garde en tête le problème des types, c'est peut-être la cause de l'erreur.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 13/07/2014 18:58 | #


Cartix, j'ai expliqué ce qui n'allait pas ^^. Il me retourne des valeurs aberrantes.
unsigned int diff_chasse(unsigned int tdc, unsigned int supplement)
{
    unsigned int difficulte;
    unsigned char buffer[50];
    
    difficulte = (supplement + (tdc + supplement) * 0.01) * (pow(1.04, (unsigned int)(log((tdc + supplement) / 50) / log(pow(10, 0.1)))+0.5)) * 3;
    // difficulte = (supplement + (tdc+supplement)/100) * (pow(1.04, (log(tdc + supplement) - 3.91202300543) * 4.34294481903 )) * 3;
    
    sprintf(buffer,"%d", difficulte);
    PrintMini(0,0,buffer,0);
    ML_display_vram();
    Sleep(5000);
    
    return difficulte;
}

J'ai changé tout les types et toujours le même soucis
Lephenixnoir En ligne Administrateur Points: 24671 Défis: 170 Message

Citer : Posté le 13/07/2014 19:07 | #


Regarde mon message en page précédente. Le 0.5 n'est pas compris dans le unsigned int, donc ton round() est incorrect.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 13/07/2014 19:11 | #


Ha ok j'avais pas compris ca comme ca
Ducoup ca va un peu mieux: plus que 79 904 439
Lephenixnoir En ligne Administrateur Points: 24671 Défis: 170 Message

Citer : Posté le 13/07/2014 19:13 | #


Oui, il y a un autre problème : log() renvoie des double, il faut donc que tu forces le calcul flottant partout, soit en castant en double, soit en passant par des variables intermédiaires.
C'est d'ailleurs peut-être la solution au problème...
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 13/07/2014 19:29 | #


Bon j'ai l'impression de massacrer un peu tout
J'ai fait ça qui me renvoi toujours la même valeur:
unsigned int diff_chasse(double tdc, double supplement)
{
    unsigned int difficulte;
    double a, b, c;
    unsigned char buffer[50];
    
    a = supplement + (tdc + supplement) * 0.01;
    b = pow(1.04, log((tdc + supplement) / 50) / log(pow(10., 0.1)) );
    c = 3.;
    difficulte = (unsigned int)(a * b * c);
    
    sprintf(buffer,"%d", difficulte);
    PrintMini(0,0,buffer,0);
    ML_display_vram();
    Sleep(5000);
    
    return difficulte;
}

Lephenixnoir En ligne Administrateur Points: 24671 Défis: 170 Message

Citer : Posté le 13/07/2014 19:31 | #


Ça sert à rien. Il faut que tu castes en double. Par exemple :
int b = 10;
double a = b*log(20);

Tu as 9 chances sur 10 que a ne contiennent qu'une valeur entière. Pour éviter ça, il faut forcer le calcul flottant :
a = (double)b*log(20);

Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 13/07/2014 19:40 | #


Je ne vois pas ou tu veux en venir
Tout mes calculs sur a, b, et c se font avec des doubles donc logiquement, il devrait pas y avoir de problemes a ce niveau la ?
Lephenixnoir En ligne Administrateur Points: 24671 Défis: 170 Message

Citer : Posté le 13/07/2014 21:19 | #


Au temps pour moi, je n'avais pas vu que tdc et supplement étaient des double.
Est-ce que leur somme peut dépasser 4 milliards ?
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 14/07/2014 13:10 | #


Ben ... non
De toute façon, dans ce cas, ca fait 200 001 000 de total donc ca devrait sortir quelque chose de juste ?

Ajouté le 14/07/2014 à 13:13 :
En tappant tout a la calculette, je trouve le meme resultat... Donc le probleme vient de la formule. Soit j'ai pas la bonne soit je l'ai mal traduite
Lephenixnoir En ligne Administrateur Points: 24671 Défis: 170 Message

Citer : Posté le 14/07/2014 14:33 | #


Theprog a écrit :
En tappant tout a la calculette, je trouve le meme resultat...

Bonne idée, je n'y avais pas pensé.
Tu as essayé de taper la formule originelle pour voir ?
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 14/07/2014 14:39 | #


OK excusez moi pour le dérangement, je suis juste teubé
En fait je me suis trompé dans les données du simulateur
Lephenixnoir En ligne Administrateur Points: 24671 Défis: 170 Message

Citer : Posté le 14/07/2014 14:43 | #


Tant mieux alors.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
-florian66- Hors ligne Ancien rédacteur Points: 2384 Défis: 20 Message

Citer : Posté le 21/08/2014 17:41 | #


je pensais que jamais je ne mettrais un commentaire là mais j'ai un system error sur
int charge;
    char charge_val[3];
        for  (charge = 0; charge<100; charge ++ )
        {
        sprintf(charge_val,"%d",charge);
        PrintMini(92,58,charge_val,0);
        }


Je sais pas d'où ça viens
In Arch, I trust ! And you ?
Précédente 1, 2, 3 ··· 10, 11, 12, 13, 14, 15, 16, 17 ··· 20, 21, 22, 23 Suivante

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 86 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd