#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
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
Citer : Posté le 13/07/2014 16:31 | #
(int)(n+.5) = round(n).
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...
Citer : Posté le 13/07/2014 18:32 | #
(int)(n+.5) = round(n).
Ah oui. Désolé, j'avais pas fait attention que le .5 n'était pas présent avant
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...
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:
{
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:
Les chiffres de l'appel peuvent être très grands mais toujours en entiers positifs.
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
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.
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 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
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.
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
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...
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 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;
}
Citer : Posté le 13/07/2014 19:31 | #
Ça sert à rien. Il faut que tu castes en double. Par exemple :
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 :
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 ?
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 ?
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
Citer : Posté le 14/07/2014 14:33 | #
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 ?
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
Citer : Posté le 14/07/2014 14:43 | #
Tant mieux alors.
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
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