AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  Connexion  

Partagez | 
 

 [RESOLU] Séparation d'un nombre ?

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Mamie Wawa
Très bonne participation


Messages : 112

MessageSujet: [RESOLU] Séparation d'un nombre ?   Lun 26 Aoû 2013 - 22:42

Bonjour,

J'ai un petit problème que je n'arrive pas à résoudre, et je n'ai pas non plus trouvé sur le forum, ni sur google, donc je pose la question.

J'ai une variable que j'affiche avec un draw, mais cette variable, dans un soucis d'esthétique, j'aimerai séparer tous les 3 chiffres d'une virgule pour qu'esthétiquement ce soit mieux, c'est assez brouillon expliqué comment ça mais en gros je veux passer de ça > 123456789 à ça > 123,456,789 ( ou encore 12,459 / 3,153 / etc.. )

Je rajoute le draw qui me permet d'afficher la variable, si jamais ça peut influencer >
Code:
draw_text_color(x,y,string(global.variable),color_random,color_random,color_random,color_random,1)
Que la lisibilité du nombre soit améliorer happy1
Est-ce possible ? sweat 

Merci d'avance ! happy1


Dernière édition par Mamie Wawa le Mar 27 Aoû 2013 - 19:23, édité 1 fois
Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
avatar

Messages : 2213
Localisation : Oui

MessageSujet: Re: [RESOLU] Séparation d'un nombre ?   Mar 27 Aoû 2013 - 6:15

Tu fais une fontion addPoints(str) :
a=0;
for(i=string_length(str);i>0;i-=1){
a+=1;
str+=string_char_at(str,i);
if(a%3==0){
str+=",";
}
}
return str;

Et ensuite t'affiche ca : addPoints(string(tonNombre)).
Bon j'ai pas testé mais ca devrait marcher Smile essaie de comprendre comment ca marche, c'est pas très compliqué Smile
Indice : %, c'est un modulo, et ca te retourne le reste de la division ; donc 22%4=2.

_________________
Je suis partie sur les ailes du vent et la tempête m'a ramenée.
Revenir en haut Aller en bas
Mamie Wawa
Très bonne participation


Messages : 112

MessageSujet: Re: [RESOLU] Séparation d'un nombre ?   Mar 27 Aoû 2013 - 11:53

J't'avouerai que je suis une bille dès que ça touche aux boucle for / while / etc...
Même en essyant de comprendre, j'y arrive pas snif 

Mfin bref, j'ai essayé mais quand je lance j'ai ce message >
Citation :
ERROR in
action number 1
of Draw Event
for object obj_show:

Illegal argument count calling script "addPoints".
Script requires 0 arguments, 1 have been supplied.
Et le code que j'ai mis dans un script ( d'ailleurs je sais même pas si c'est correct de le mettre dans un script triste ) >
Code:
a=0;

for( i=string_length(str) ; i>0 ; i-=1 )
 {
 a += 1;
 str += string_char_at(str,i);
 if ( a mod 3 == 0)
  {
  str+=",";
  }
 }

return str;
Puis après j'appelle le script et je l'affiche avec le draw_text >
Code:
draw_text(x,y,addPoints(string(global.variable)))

Ça doit surement te paraitre tout con pour toi mais personnellement je trouve pas scratch
Revenir en haut Aller en bas
GrandeLangue
Bonne participation
avatar

Messages : 77
Localisation : Lille
Projet Actuel : Faire des maths

MessageSujet: Re: [RESOLU] Séparation d'un nombre ?   Mar 27 Aoû 2013 - 12:23

Je te conseille de lire ces 2 pages du manuel :

http://gamemaker.info/fr/manual/211_00_scripts
et http://gamemaker.info/fr/manual/401_18_scripts

Je suis sûr que tu trouveras le problème tout seul dès que tu les aura lues happy1 


Pour les boucles for et while, je ne peux que te conseiller le magnifique tuto de onilink sur le sujet :
http://cbna.forumactif.com/t10923-apprendre-le-gml-4-les-boucles

_________________
Un superbe jeu de plateforme où vous pouvez contrôler le temps ici : TimeBoy

Pour maîtriser les pistons dans Minecraft : http://www.youtube.com/MindcraftMax
Project Spark est mort, vive Project Spark ! Top 25 des créations qui ont été réalisées avec ce moteur de création de jeu depuis sa sortie, avant que les serveurs n'aient été arrêtés : https://www.youtube.com/watch?v=nPenVqIcFgc


Dernière édition par GrandeLangue le Mar 27 Aoû 2013 - 14:11, édité 1 fois
Revenir en haut Aller en bas
Mamie Wawa
Très bonne participation


Messages : 112

MessageSujet: Re: [RESOLU] Séparation d'un nombre ?   Mar 27 Aoû 2013 - 12:31

Le deuxième lien est un 404 et en cherchant sur le site j'ai pas trouvé vers quelle page sa mène, tu peux le renvoyer ? zip 

Merci rouge

EDIT: J'ai rien dis fallait enlever le point je pensais que y avait quelque chose derrière sweat

RE-EDIT: Donc j'appelle le script, avec l'argument str puis j'affiche la variable ?

Code:
addPoints(str)
draw_text(x,y,addPoints(string(global.variable)))
Après ça me dit unknow variale str snif
ça m'énerve de pas comprendre, c'est pire encore
Revenir en haut Aller en bas
GrandeLangue
Bonne participation
avatar

Messages : 77
Localisation : Lille
Projet Actuel : Faire des maths

MessageSujet: Re: [RESOLU] Séparation d'un nombre ?   Mar 27 Aoû 2013 - 14:24

Non, ton code dans le draw event est bon, c'est dans ton script qu'il y a un problème.
Citation :
Script requires 0 arguments, 1 have been supplied.
signifie que tu as appelé ton script de cette façon : script(argument0) alors qu'à l'intérieur de ton script, il n'utilise pas la variable argument0.

En effet, ton script ne connait pas la variable str, il ne sait pas que toi tu veux mettre ton argument dans str. Un script ne connait que les variables qu'on lui envoit et qui sont nommées à l'intérieur du script : argument0, argument1, etc jusqu'à argument15. Donc il te suffit simplement en haut de ton script d'ajouter la ligne :
Code:
var str;
str = argument0;
Maintenant quand tu vas appeler addPoints(string(global.variable)), il va mettre string(global.variable) dans argument0 et comme tu déclares une variable str égale à argument0, ton code pourra marcher.

_________________
Un superbe jeu de plateforme où vous pouvez contrôler le temps ici : TimeBoy

Pour maîtriser les pistons dans Minecraft : http://www.youtube.com/MindcraftMax
Project Spark est mort, vive Project Spark ! Top 25 des créations qui ont été réalisées avec ce moteur de création de jeu depuis sa sortie, avant que les serveurs n'aient été arrêtés : https://www.youtube.com/watch?v=nPenVqIcFgc
Revenir en haut Aller en bas
Mamie Wawa
Très bonne participation


Messages : 112

MessageSujet: Re: [RESOLU] Séparation d'un nombre ?   Mar 27 Aoû 2013 - 15:15

Eh beh put**n gha
Ouais voilà, jme disais bien tout con, mais je trouvai quand même pas sweat 

Sinon, j'ai plus d'erreur mais le script réagi très bizarrement, que ce soit avec une variable ou un nombre rentré à la main
Donc le code du script >

Code:
var str;
str = argument0;

a=0;

for( i=string_length(str) ; i>0 ; i-=1 )
 {
 a += 1;
 str += string_char_at(str,i);
 if ( a * 3 == 0)
  {
  str += ",";
  }
 }

return str;
Le seul truc que j'ai changé c'est le % que j'ai changé par mod ( pour modulo ) car game maker considère pas le % comme modulo

Le draw >

Code:
draw_text_color(x,y,addPoints(string((123456789))),color_random,color_random,color_random,color_random,1)
Et ça m'affiche
Citation :
123456789987,654,321,
scratch

Donc si je comprend bien le str du script reprend donc le "123456789" que je veux afficher puis le "return", donc ça limite je comprend que je l'ai après afficher 2 fois, mais pourquoi à l'envers ? Et comment régler ça ?

Pour éviter que le nombre se retrouve 2 fois, faudrait retourner str, le changer en argument1, supprimer argument0puis afficher agument1 ? Enfin je sais pas comment expliquer ça c'est brouillon et je m'emmêle triste2

J'ai essayé de changer des + par des - et des - par des + voir si ça changeait l'ordre d'apparition des chiffres mais non
Pareil j'essaye différents code voir si ça pourrait changer mais soit ça bug soit ça fait rien mop
Revenir en haut Aller en bas
marty
Utilisateur confirmé: Rang ***
avatar

Messages : 697
Projet Actuel : laby-ereinte !

MessageSujet: Re: [RESOLU] Séparation d'un nombre ?   Mar 27 Aoû 2013 - 15:54

salut,je me suis plongé sur ton problème et ce fut un casse tête!
 

crée un script qui s'appelle score_aff
place ce code:

Code:
a=0
b=0
entre_scor=(argument0)
sortie_scor=(argument1)

for(a=string_length(argument0);a>=0;a-=1;){
b+=1
if(b mod 3==0){
argument0=string_insert(" ",argument0,a)}
}
argument1=argument0
return argument1
dans l'event create de ton objet

invente une variable kill,gold,..tout sauf score car  game maker l'utilise déjà.

je l'appelle win

dans le draw de ton objet:

place un execute code et met dedans:
Code:
aff=score_aff(win)
draw_text(10,10,aff)
l'objet t'affiche la variable aff qui est le resultat du script score_aff

en espèrant que cela te mette sur la voix clinoeuil

_________________
Code:
rnd=>insight=>play

http://gamemaker.info/fr/manual



Revenir en haut Aller en bas
GrandeLangue
Bonne participation
avatar

Messages : 77
Localisation : Lille
Projet Actuel : Faire des maths

MessageSujet: Re: [RESOLU] Séparation d'un nombre ?   Mar 27 Aoû 2013 - 16:09

Attends, en fait je n'avais pas regarder ce que faisait le code de Térence, donc j'avais pas trop fait attention à ce qu'il voulait faire. Donc il y a une erreur qui vient de ma part, c'est que str = argument0 implique de mettre "123456789" dans str. Or le code de Térence ajoute "987,654,321"  à str, d'où ton résultat étrange.
En fait, il faut mettre au début de ton script :
var str;
str = argument0 "";
Et dans le code de Térence, changer
for( i=string_length(str argument0) ; i>0 ; i-=1 )
str+=string_char_at(str argument0,i);
Ainsi tu n'auras plus le "123456789" devant.

Une autre erreur vient de Térence cette fois-ci, c'est que la chaîne de caractère est inversée. Le code renvoie en réalité "" + dernier char de argument0 + avt-dernier + ... + 2eme + 1er.
Plutôt que de te donner la réponse, je te propose de trouver toi-même comment modifier sa boucle for pour obtenir "" + 1er char de argument0 + 2eme + ... + dernier. Tu peux même te passer de la variable a si tu te débrouilles bien (en utilisant i à la place...).

Ah aussi, je te conseille de toujours rajouter
var nom_de_ta_variable;
en haut de ton script pour chaque variable que tu utilises pour retenir des résultats "intermédiaires". En effet, cette commande déclare une variable locale au script uniquement, et qui sera donc détruite à la fin du script. Si tu ne le fait pas, tu vas rajouter une variable inutile dans l'instance qui appelle ton script.
Par exemple ici il vaut mieux rajouter var a; en haut du script pour que ton instance ne se balade pas avec une variable a pendant tout ton jeu.


Ou sinon tu peux utiliser le code de marty, mais il est beaucoup moins optimisé (enfin, si la fonction string_insert fait ce que je crois qu'elle fait).

_________________
Un superbe jeu de plateforme où vous pouvez contrôler le temps ici : TimeBoy

Pour maîtriser les pistons dans Minecraft : http://www.youtube.com/MindcraftMax
Project Spark est mort, vive Project Spark ! Top 25 des créations qui ont été réalisées avec ce moteur de création de jeu depuis sa sortie, avant que les serveurs n'aient été arrêtés : https://www.youtube.com/watch?v=nPenVqIcFgc
Revenir en haut Aller en bas
Mamie Wawa
Très bonne participation


Messages : 112

MessageSujet: Re: [RESOLU] Séparation d'un nombre ?   Mar 27 Aoû 2013 - 16:40

Ok, merci GrandeLangue et Marty, je vais essayé de trouver par moi-même comme tu as dis même si j'essaye depuis 20 mins et que je rageote de plus en plus de pas comprendre Mad

Et merci aussi pour le conseil Smile

Si tu as un indice de comment faire je suis preneur, même un petit xD
Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
avatar

Messages : 2213
Localisation : Oui

MessageSujet: Re: [RESOLU] Séparation d'un nombre ?   Mar 27 Aoû 2013 - 17:24

Arf, j'ai plus l'habitude de GM moi Yum! 
Ouais, c'est ma faute, str c'est argument0, et il faut une deuxième variable pour le return...
Pour l'ordre des lettres inversé, c'est encore de ma faute, mais un petit calcul de rien du tout suffit à le régler ; essaie de trouver toi meme :
i, c'est l'"étape" à laquelle on est, sachant qu'on débute à l'étape string_length(argument0) et qu'on diminue chaque fois qu'on rajoute un nombre (et éventuellement une virgule) jusqu'à atteindre 0.
Bon, comme à mon avis je suis pas clair, vlà le code, mais essaie d'abord par toi meme Wink
Spoiler:
 
Cette fois ci si ca marche pas je bouffe un balais Yum!

_________________
Je suis partie sur les ailes du vent et la tempête m'a ramenée.
Revenir en haut Aller en bas
Mamie Wawa
Très bonne participation


Messages : 112

MessageSujet: Re: [RESOLU] Séparation d'un nombre ?   Mar 27 Aoû 2013 - 18:17

Merci de t'être repenché sur le sujet mais ton code agi aussi bizarrement sur le nombre ( je passe de 123456789 à 112,345,678, )

Sinon j'ai trouvé comment inverser l'arrivé des chiffres sur le premier code que tu avais donné avec l'aide de GrandeLangue >
( fallait changer le i en a de string_char_at )
Code:
var str;
str = "";

a = 0;

for( i=string_length(argument0) ; i>0 ; i-=1 )
 {
 a += 1
 str += string_char_at(argument0,a);
  if ( a mod 3 == 0)
  {
  str += ",";
  }
 }
 
return str;
Je comprend un peu mieux le fonctionnement des boucle for mais il reste toujours un problème avec que je n'arrive pas à régler c'est que les , commence de gauche à droite alors que logiquement on marque de droit à gauche ( par exemple j'ai 12345678912 ça me donne > 123,456,789,12 alors que j'aimerai que ça me fasse 12,345,678,912 )
Et aussi j'ai un autre problème qui me gâche complétement tout, c'est que ma variable possède un . ( par exemple 15.45 ) et donc ça me fait un affichage complétement horrible ( 152,425,1.15 par exemple ) comment faire en sorte que les virgules se mettent en place à partir du troisième chiffre après le . ?
Limite si je savais comment faire pour inverser le placement des virgules je pourrais changer le a = 2 pour commencer à partir du point ( enfin je pense ? ) mais c'est pas le cas triste

RE-EDIT: D'ailleurs j'ai essayé de reprendre l'idée du lentgh et de le rajouter au code puis de faire un length-a dans le string_char_at mais ça fonctionne pas non plus triste2 
Revenir en haut Aller en bas
D-z
Utilisateur confirmé: Rang *****
avatar

Messages : 1609
Localisation : Montpellier

MessageSujet: Re: [RESOLU] Séparation d'un nombre ?   Mar 27 Aoû 2013 - 18:42

Code:
var i;
var len;
var m;
var str;

str = "";
len = string_pos(".", argument0);

if(len == 0)
    len = string_length(argument0);

m = len mod 3;

for(i = 1; i < len; i += 1) {
    if(i > 1 && i mod 3 == m)
        str += ",";
    str += string_char_at(argument0, i);
}

return str + string_delete(argument0, 1, len - 1);
Je pense que ça marche, mais j'ai pas GM sous la main.

_________________
 
Home is not a place, it's a feeling.
Revenir en haut Aller en bas
GrandeLangue
Bonne participation
avatar

Messages : 77
Localisation : Lille
Projet Actuel : Faire des maths

MessageSujet: Re: [RESOLU] Séparation d'un nombre ?   Mar 27 Aoû 2013 - 18:45

La fonction string_char_at(str,index) Retourne le caractère de str à la position index.

C'est-à-dire que string_char_at("123456789",1) renvoie le caractère à la position 1, c'est-à-dire "1".
string_char_at("123456789",2) renvoit "2", etc. (Note qu'il faut bien faire attention à ce que l'index soit compris entre 1 et string_length(str). D'ailleurs Térence, ton code comporte une erreur de ce côté-là...)

Pour résoudre le problème d'inversion, plusieurs possibilités. Mais celle de Térence ne fonctionne absolument pas rire2 

Ce que toi tu proposes, je ne pense pas que tu l'ai bien compris. En effet, tu remplaces i par a. Mais alors, à quoi sert ta variable i ? La boucle for deviendrait alors inutile...

La solution simple à ton problème (c'est ce que voulait faire Térence je pense), et tu gardes la variable a pour compter tous les 3 chiffres quand mettre une virgule :
puisque str += char; est inversé, il suffit de se rappeler que cela équivaut à str = str + char;
"L'inverse" de cette commande est juste : str = char + str;
Donc :
Code:
var str, a;
str = "";
a = 0;

for( i=string_length(argument0) ; i>0 ; i-=1 )
 {
 a += 1
 str = string_char_at(argument0,a) + str;
  if (a mod 3 == 0)
  {
  str = "," + str;
  }
 }
 
return str;
Le seul petit défaut, c'est le caractère "," qui est ajouté parfois à la fin du nombre. Exemple : "123,456,789,"
Pour ça, modifie la condition qui rajoute "," :
Code:
if (a mod 3 == 0 && a != string_length(argument0))
Cependant, pour bien apprécier l'utilité de la boucle for, on peut ne pas utiliser la variable a.
Voilà comment :
Code:
var length, str;
length = string_length(argument0);
str = "";

for (i = 1; i<=length; i+=1)
{
    str += string_char_at(argument0,i)
    if (i != length && (length - i) mod 3 == 0) // i != length sinon il pourrait y avoir une virgule à la fin comme j'expliquais : "123,456,789,")
    {
        str += ",";
    }
}

return str;

_________________
Un superbe jeu de plateforme où vous pouvez contrôler le temps ici : TimeBoy

Pour maîtriser les pistons dans Minecraft : http://www.youtube.com/MindcraftMax
Project Spark est mort, vive Project Spark ! Top 25 des créations qui ont été réalisées avec ce moteur de création de jeu depuis sa sortie, avant que les serveurs n'aient été arrêtés : https://www.youtube.com/watch?v=nPenVqIcFgc


Dernière édition par GrandeLangue le Mar 27 Aoû 2013 - 19:08, édité 2 fois
Revenir en haut Aller en bas
Mamie Wawa
Très bonne participation


Messages : 112

MessageSujet: Re: [RESOLU] Séparation d'un nombre ?   Mar 27 Aoû 2013 - 18:53

Eh beh ouh
Franchement gg j'aurai pas pu le faire tout seul ( alors qui faudrait triste )

J'ai vraiment une toute dernière question, après je te tiens plus la jambe ( xD ) j'ai dis plus haut que ma variable possédait un . ( par exemple 15441.15 ) donc pour éviter que ça me fasse 1,854,.89 par exemple j'ai tenté de faire
Code:
if (a mod 3 == 0 && a != string_length(argument0) && a != (string_length(argument0) - string_length(argument0)) - 2)
En essayant de m'inspirer de ce que tu as fait pour supprimer la dernière ,  donc je retourne la longueur de argument0 je la soustrais à...
Ok je viens juste de me rendre compte de mon erreur en écrivant ce que je voulais savoir xD
Enfaites le calcule fait
Code:
argument0 - argument0 donc 0 puis - 2
or la première virgule qui se trouve après le . se trouve à +3

Donc
Code:
if (a mod 3 == 0 && a != string_length(argument0) && a != (string_length(argument0) - string_length(argument0)) + 3 )
et ça résous le soucis de cette virgule inutile aussi ! Very Happy
Je sais que tu le savais déjà mais je l'écris si jamais quelqu'un d'autre en aurait besoin

En tout cas un grand merci pour toute ton aide et à ceux qui ont participé au sujet, vraiment merci, et désolé de vous avoir dérangé Confused


Dernière édition par Mamie Wawa le Mar 27 Aoû 2013 - 19:20, édité 1 fois
Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
avatar

Messages : 2213
Localisation : Oui

MessageSujet: Re: [RESOLU] Séparation d'un nombre ?   Mar 27 Aoû 2013 - 21:15

Si je suis absent un moment, c'est soi parce que :
- je me suis pendu haut et court sur l'arbre de ma bêtise.
- le balai a du mal à passer.

_________________
Je suis partie sur les ailes du vent et la tempête m'a ramenée.
Revenir en haut Aller en bas
Mamie Wawa
Très bonne participation


Messages : 112

MessageSujet: Re: [RESOLU] Séparation d'un nombre ?   Mar 27 Aoû 2013 - 21:35

Haha xD
Revenir en haut Aller en bas
D-z
Utilisateur confirmé: Rang *****
avatar

Messages : 1609
Localisation : Montpellier

MessageSujet: Re: [RESOLU] Séparation d'un nombre ?   Mer 28 Aoû 2013 - 9:16

Citation :
a != (string_length(argument0) - string_length(argument0)) + 3
Faut qu'on m'explique là ._.

Sauf énorme bug, et GM étant monothread, c'est pas équivalent à (a != 3) ?

Sinon, solution simple de GrandeLangue avec l'insertion en début de chaîne, cependant ça peut avoir un impact sur les performances (décalage en mémoire de tout le contenu de la chaîne).

_________________
 
Home is not a place, it's a feeling.
Revenir en haut Aller en bas
Mamie Wawa
Très bonne participation


Messages : 112

MessageSujet: Re: [RESOLU] Séparation d'un nombre ?   Mer 28 Aoû 2013 - 12:09

Oui ça marche aussi rouge
enfin bon faut pas chercher, j'aime bien faire des calculs inutile xD
Revenir en haut Aller en bas
Contenu sponsorisé




MessageSujet: Re: [RESOLU] Séparation d'un nombre ?   

Revenir en haut Aller en bas
 
[RESOLU] Séparation d'un nombre ?
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Réparation fap cassé : changement de couleur
» barre de séparation
» séparation/garderie?
» préparation 1er commande ... ??
» nombre de cousins ?

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Développement :: Entraide débutants-
Sauter vers: