Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Lucas Levrel
Le 22 janvier 2014, Stephane a écrit :
J'aimerais écrire une petite fonction qui arrondit de façon "souple" en supérieur. Par ex : 5 => 10 20 => 50 (voire 100) 140 => 200
J'ai essayé avec ceil() et log10(), mais ça m'arrondit trop haut (140 me donne 1000 par exemple)
Il faut que tu définisses plus précisément ce que tu veux. D'une part parce qu'on ne peut pas deviner ce que tu appelles « arrondi souple », d'autre part parce que la solution t'apparaîtra probablement toute seule quand tu auras formalisé ton besoin.
-- LL Eν οιδα οτι ουδεν οιδα (Σωκρατης)
Le 22 janvier 2014, Stephane a écrit :
J'aimerais écrire une petite fonction qui arrondit de façon "souple" en
supérieur.
Par ex :
5 => 10
20 => 50 (voire 100)
140 => 200
J'ai essayé avec ceil() et log10(), mais ça m'arrondit trop haut
(140 me donne 1000 par exemple)
Il faut que tu définisses plus précisément ce que tu veux. D'une part
parce qu'on ne peut pas deviner ce que tu appelles « arrondi souple »,
d'autre part parce que la solution t'apparaîtra probablement toute seule
quand tu auras formalisé ton besoin.
J'aimerais écrire une petite fonction qui arrondit de façon "souple" en supérieur. Par ex : 5 => 10 20 => 50 (voire 100) 140 => 200
J'ai essayé avec ceil() et log10(), mais ça m'arrondit trop haut (140 me donne 1000 par exemple)
Il faut que tu définisses plus précisément ce que tu veux. D'une part parce qu'on ne peut pas deviner ce que tu appelles « arrondi souple », d'autre part parce que la solution t'apparaîtra probablement toute seule quand tu auras formalisé ton besoin.
-- LL Eν οιδα οτι ουδεν οιδα (Σωκρατης)
Olivier Miakinen
Bonjour,
Le 23/01/2014 09:30, Lucas Levrel répondait à Stéphane :
Il faut que tu définisses plus précisément ce que tu veux. D'une part parce qu'on ne peut pas deviner ce que tu appelles « arrondi souple »,
En effet.
d'autre part parce que la solution t'apparaîtra probablement toute seule quand tu auras formalisé ton besoin.
Entièrement d'accord.
Bonjour,
Le 23/01/2014 09:30, Lucas Levrel répondait à Stéphane :
Il faut que tu définisses plus précisément ce que tu veux. D'une part
parce qu'on ne peut pas deviner ce que tu appelles « arrondi souple »,
En effet.
d'autre part parce que la solution t'apparaîtra probablement toute seule
quand tu auras formalisé ton besoin.
Le 23/01/2014 09:30, Lucas Levrel répondait à Stéphane :
Il faut que tu définisses plus précisément ce que tu veux. D'une part parce qu'on ne peut pas deviner ce que tu appelles « arrondi souple »,
En effet.
d'autre part parce que la solution t'apparaîtra probablement toute seule quand tu auras formalisé ton besoin.
Entièrement d'accord.
Stephane
Lucas Levrel a écrit :
Le 22 janvier 2014, Stephane a écrit :
J'aimerais écrire une petite fonction qui arrondit de façon "souple" en supérieur. Par ex : 5 => 10 20 => 50 (voire 100) 140 => 200
J'ai essayé avec ceil() et log10(), mais ça m'arrondit trop haut (140 me donne 1000 par exemple)
Il faut que tu définisses plus précisément ce que tu veux. D'une part parce qu'on ne peut pas deviner ce que tu appelles « arrondi souple », d'autre part parce que la solution t'apparaîtra probablement toute seule quand tu auras formalisé ton besoin.
Résultats identiques/similaires à l'exemple que j'ai mis ou "roundUpNice" de ce thread, mais pas pu conveetir en C:
J'aimerais écrire une petite fonction qui arrondit de façon "souple"
en supérieur.
Par ex :
5 => 10
20 => 50 (voire 100)
140 => 200
J'ai essayé avec ceil() et log10(), mais ça m'arrondit trop haut
(140 me donne 1000 par exemple)
Il faut que tu définisses plus précisément ce que tu veux. D'une part
parce qu'on ne peut pas deviner ce que tu appelles « arrondi souple »,
d'autre part parce que la solution t'apparaîtra probablement toute seule
quand tu auras formalisé ton besoin.
Résultats identiques/similaires à l'exemple que j'ai mis ou
"roundUpNice" de ce thread, mais pas pu conveetir en C:
J'aimerais écrire une petite fonction qui arrondit de façon "souple" en supérieur. Par ex : 5 => 10 20 => 50 (voire 100) 140 => 200
J'ai essayé avec ceil() et log10(), mais ça m'arrondit trop haut (140 me donne 1000 par exemple)
Il faut que tu définisses plus précisément ce que tu veux. D'une part parce qu'on ne peut pas deviner ce que tu appelles « arrondi souple », d'autre part parce que la solution t'apparaîtra probablement toute seule quand tu auras formalisé ton besoin.
Résultats identiques/similaires à l'exemple que j'ai mis ou "roundUpNice" de ce thread, mais pas pu conveetir en C:
Alors je vais essayer de formaliser, tu nous diras si c'est ça.
1) si tous les chiffres sauf le premier sont à 0, remplacer le premier chiffre par la séquence de deux chiffres 10 5 => 10 20 => 100 100 => 1000 9000 => 10000
2) sinon, remplacer le premier chiffre par son successeur, et tous les autres par 0 21 => 30 29 => 30 101 => 200 199 => 200 221 => 300 917 => 1000
C'est ce qui me semble le plus proche de ta demande. Malgré tout, ça donne des résultats que, personnellement, je trouve peu intuitifs. Par exemple :
Alors je vais essayer de formaliser, tu nous diras si c'est ça.
1) si tous les chiffres sauf le premier sont à 0, remplacer
le premier chiffre par la séquence de deux chiffres 10
5 => 10
20 => 100
100 => 1000
9000 => 10000
2) sinon, remplacer le premier chiffre par son successeur, et
tous les autres par 0
21 => 30
29 => 30
101 => 200
199 => 200
221 => 300
917 => 1000
C'est ce qui me semble le plus proche de ta demande. Malgré tout, ça
donne des résultats que, personnellement, je trouve peu intuitifs.
Par exemple :
Alors je vais essayer de formaliser, tu nous diras si c'est ça.
1) si tous les chiffres sauf le premier sont à 0, remplacer le premier chiffre par la séquence de deux chiffres 10 5 => 10 20 => 100 100 => 1000 9000 => 10000
2) sinon, remplacer le premier chiffre par son successeur, et tous les autres par 0 21 => 30 29 => 30 101 => 200 199 => 200 221 => 300 917 => 1000
C'est ce qui me semble le plus proche de ta demande. Malgré tout, ça donne des résultats que, personnellement, je trouve peu intuitifs. Par exemple :
J'aimerais écrire une petite fonction qui arrondit de façon "souple" en supérieur. Par ex : 5 => 10 20 => 50 (voire 100)
pourquoi 50 ? 20 est 4 fois plus grand que 5 lequel est arrondi à 10. Aussi par homogénéité, j'arrondirais 20 à 4*10 = 40. Qu'est ce qui ne va pas à ce 40 pour que tu lui préfères 50 ?
140 => 200
De même 140 = 28*5, donc pourquoi ne pas arrondir à 28*10 ?
C'est quoi ton arrondi "souple" au juste ? Qu'est ce qui décide qu'il faut arrondir à 50 et pas à 40, ou à 200 et pas 280 ?
J'ai essayé avec ceil() et log10(), mais ça m'arrondit trop haut (140 me donne 1000 par exemple)
Pourquoi 1000 est trop haut ? Quel critère utilises tu ?
Le 22/01/2014 18:34, Stephane a écrit :
Bonjour,
J'aimerais écrire une petite fonction qui arrondit de façon "souple" en
supérieur.
Par ex :
5 => 10
20 => 50 (voire 100)
pourquoi 50 ? 20 est 4 fois plus grand que 5 lequel est arrondi à 10.
Aussi par homogénéité, j'arrondirais 20 à 4*10 = 40. Qu'est ce qui ne va
pas à ce 40 pour que tu lui préfères 50 ?
140 => 200
De même 140 = 28*5, donc pourquoi ne pas arrondir à 28*10 ?
C'est quoi ton arrondi "souple" au juste ? Qu'est ce qui décide qu'il
faut arrondir à 50 et pas à 40, ou à 200 et pas 280 ?
J'ai essayé avec ceil() et log10(), mais ça m'arrondit trop haut
(140 me donne 1000 par exemple)
Pourquoi 1000 est trop haut ? Quel critère utilises tu ?
J'aimerais écrire une petite fonction qui arrondit de façon "souple" en supérieur. Par ex : 5 => 10 20 => 50 (voire 100)
pourquoi 50 ? 20 est 4 fois plus grand que 5 lequel est arrondi à 10. Aussi par homogénéité, j'arrondirais 20 à 4*10 = 40. Qu'est ce qui ne va pas à ce 40 pour que tu lui préfères 50 ?
140 => 200
De même 140 = 28*5, donc pourquoi ne pas arrondir à 28*10 ?
C'est quoi ton arrondi "souple" au juste ? Qu'est ce qui décide qu'il faut arrondir à 50 et pas à 40, ou à 200 et pas 280 ?
J'ai essayé avec ceil() et log10(), mais ça m'arrondit trop haut (140 me donne 1000 par exemple)
Pourquoi 1000 est trop haut ? Quel critère utilises tu ?
Samuel DEVULDER
Le 23/01/2014 09:47, Stephane a écrit :
Résultats identiques/similaires à l'exemple que j'ai mis ou "roundUpNice" de ce thread, mais pas pu conveetir en C:
Ok je comprends, tu as un nombre x, tu veux trouver le nombre y = a*10^b minimal tel que x<=y, et a dans l'ensemble (1, 2, 4, 5, 6, 7, 8). (a est exclus de la définition car en prennant un b plus grand de 1 unité et a on revient au même.)
Essaye de voir ce que donne le code:
int roundUpNice(int x) { static int a[] = {1,2,4,5,6,7,8,10}; // par contre 10 sert ici de sentinelle
int dix_puissance_b = 1, i;
if(x<=0) return x; // oui bon, ou autre chose.
while(x<*dix_puissance_b) dix_puissance_b *= 10; // ici on a forcément n sortie dix_puissance_b<x<*dix_puissance_b
for(i=0; a[i]*dix_puissance_b < x; ++i); // on ne peut pas déborder le tableau de 'a' parce que x<*dix_puissance_b
Ok je comprends, tu as un nombre x, tu veux trouver le nombre y = a*10^b
minimal tel que x<=y, et a dans l'ensemble (1, 2, 4, 5, 6, 7, 8). (a
est exclus de la définition car en prennant un b plus grand de 1 unité
et a on revient au même.)
Essaye de voir ce que donne le code:
int roundUpNice(int x) {
static int a[] = {1,2,4,5,6,7,8,10};
// par contre 10 sert ici de sentinelle
int dix_puissance_b = 1, i;
if(x<=0) return x; // oui bon, ou autre chose.
while(x<*dix_puissance_b) dix_puissance_b *= 10;
// ici on a forcément n sortie
dix_puissance_b<x<*dix_puissance_b
for(i=0; a[i]*dix_puissance_b < x; ++i);
// on ne peut pas déborder le tableau de 'a' parce que
x<*dix_puissance_b
Ok je comprends, tu as un nombre x, tu veux trouver le nombre y = a*10^b minimal tel que x<=y, et a dans l'ensemble (1, 2, 4, 5, 6, 7, 8). (a est exclus de la définition car en prennant un b plus grand de 1 unité et a on revient au même.)
Essaye de voir ce que donne le code:
int roundUpNice(int x) { static int a[] = {1,2,4,5,6,7,8,10}; // par contre 10 sert ici de sentinelle
int dix_puissance_b = 1, i;
if(x<=0) return x; // oui bon, ou autre chose.
while(x<*dix_puissance_b) dix_puissance_b *= 10; // ici on a forcément n sortie dix_puissance_b<x<*dix_puissance_b
for(i=0; a[i]*dix_puissance_b < x; ++i); // on ne peut pas déborder le tableau de 'a' parce que x<*dix_puissance_b
Ok je comprends, tu as un nombre x, tu veux trouver le nombre y = a*10^b minimal tel que x<=y, et a dans l'ensemble (1, 2, 4, 5, 6, 7, 8). (a est exclus de la définition car en prennant un b plus grand de 1 unité et a on revient au même.)
Essaye de voir ce que donne le code:
int roundUpNice(int x) { static int a[] = {1,2,4,5,6,7,8,10}; // par contre 10 sert ici de sentinelle
int dix_puissance_b = 1, i;
if(x<=1) return x; // oui bon, ou autre chose.
while(10*dix_puissance_b<x) dix_puissance_b *= 10; // ici on a forcément en sortie dix_puissance_b < x <= 10*dix_puissance_b
for(i=0; a[i]*dix_puissance_b < x; ++i); // on ne peut pas déborder le tableau 'a' parce que x <= 10*dix_puissance_b (cf la sentinelle).
Ok je comprends, tu as un nombre x, tu veux trouver le nombre y = a*10^b
minimal tel que x<=y, et a dans l'ensemble (1, 2, 4, 5, 6, 7, 8). (a
est exclus de la définition car en prennant un b plus grand de 1 unité
et a on revient au même.)
Essaye de voir ce que donne le code:
int roundUpNice(int x) {
static int a[] = {1,2,4,5,6,7,8,10};
// par contre 10 sert ici de sentinelle
int dix_puissance_b = 1, i;
if(x<=1) return x; // oui bon, ou autre chose.
while(10*dix_puissance_b<x) dix_puissance_b *= 10;
// ici on a forcément en sortie dix_puissance_b < x <=
10*dix_puissance_b
for(i=0; a[i]*dix_puissance_b < x; ++i);
// on ne peut pas déborder le tableau 'a' parce que x <=
10*dix_puissance_b (cf la sentinelle).
Ok je comprends, tu as un nombre x, tu veux trouver le nombre y = a*10^b minimal tel que x<=y, et a dans l'ensemble (1, 2, 4, 5, 6, 7, 8). (a est exclus de la définition car en prennant un b plus grand de 1 unité et a on revient au même.)
Essaye de voir ce que donne le code:
int roundUpNice(int x) { static int a[] = {1,2,4,5,6,7,8,10}; // par contre 10 sert ici de sentinelle
int dix_puissance_b = 1, i;
if(x<=1) return x; // oui bon, ou autre chose.
while(10*dix_puissance_b<x) dix_puissance_b *= 10; // ici on a forcément en sortie dix_puissance_b < x <= 10*dix_puissance_b
for(i=0; a[i]*dix_puissance_b < x; ++i); // on ne peut pas déborder le tableau 'a' parce que x <= 10*dix_puissance_b (cf la sentinelle).
int roundUpNice(int x) { static int a[] = {1,2,4,5,6,7,8,10};
J'avoue que je me demande ce qu'ont de "nice" ces valeurs pour 'a'. On exclue 3 alors que je le trouve très joli ce 3. Bon passons :)
int dix_puissance_b = 1, i;
if(x<=1) return x; // oui bon, ou autre chose.
x<=0 irait aussi car la valeur x=1 est arrondie en 1 dans la suite de l'algo. Ce test est surtout là pour donner un sens au "roundup" de valeurs négatives. Par symétrie on pourrait définir ainsi l'arrondi pour toutes les valeurs positives, négatives ou nulles.
Mais ca n'est plus tout a fait un arrondi "par le dessus". On doit pouvoir adapter l'algo pour les cas négatifs en inversant le signe de dix_puissance_b ainsi que le sens des comparaisons, mais je suis trop flemard pour détailler ce point qui n'apporte rien sauf alourdir un algo qui se veut simple.
sam.
Le 23/01/2014 22:14, Samuel DEVULDER a écrit :
int roundUpNice(int x) {
static int a[] = {1,2,4,5,6,7,8,10};
J'avoue que je me demande ce qu'ont de "nice" ces valeurs pour 'a'. On
exclue 3 alors que je le trouve très joli ce 3. Bon passons :)
int dix_puissance_b = 1, i;
if(x<=1) return x; // oui bon, ou autre chose.
x<=0 irait aussi car la valeur x=1 est arrondie en 1 dans la suite de
l'algo. Ce test est surtout là pour donner un sens au "roundup" de
valeurs négatives. Par symétrie on pourrait définir ainsi l'arrondi pour
toutes les valeurs positives, négatives ou nulles.
Mais ca n'est plus tout a fait un arrondi "par le dessus". On doit
pouvoir adapter l'algo pour les cas négatifs en inversant le signe de
dix_puissance_b ainsi que le sens des comparaisons, mais je suis trop
flemard pour détailler ce point qui n'apporte rien sauf alourdir un algo
qui se veut simple.
int roundUpNice(int x) { static int a[] = {1,2,4,5,6,7,8,10};
J'avoue que je me demande ce qu'ont de "nice" ces valeurs pour 'a'. On exclue 3 alors que je le trouve très joli ce 3. Bon passons :)
int dix_puissance_b = 1, i;
if(x<=1) return x; // oui bon, ou autre chose.
x<=0 irait aussi car la valeur x=1 est arrondie en 1 dans la suite de l'algo. Ce test est surtout là pour donner un sens au "roundup" de valeurs négatives. Par symétrie on pourrait définir ainsi l'arrondi pour toutes les valeurs positives, négatives ou nulles.
Mais ca n'est plus tout a fait un arrondi "par le dessus". On doit pouvoir adapter l'algo pour les cas négatifs en inversant le signe de dix_puissance_b ainsi que le sens des comparaisons, mais je suis trop flemard pour détailler ce point qui n'apporte rien sauf alourdir un algo qui se veut simple.
sam.
pvluchenko
Le mercredi 22 Janvier 2014 à 18:34 par Stephane :
Bonjour,
J'aimerais écrire une petite fonction qui arrondit de façon "souple" en supérieur. Par ex : 5 => 10 20 => 50 (voire 100) 140 => 200
J'ai essayé avec ceil() et log10(), mais ça m'arrondit trop haut (140 me donne 1000 par exemple)
Merci.
bjr chers membres. j'ai un projet d'un jeu tetris. seulement je compte remplacer les blocs par des lettres du genre N-C-O-H. car je compte plutôt construire des molécules chimiques, et avec leurs différentes liaisons, aussi le programme doit être capable de donner le nom de la molécule après l'avoir construit. je sais que je devrais introduire toutes les combinaisons moléculaires. je voudrais le faire en langage c mais seulement je n'arrive pas encore à savoir comment m'y prendre pourtant je connais le programme du tetris normal. ok je vous pris de m'aider même avec ne serait-ce qu'un brainstorming
Le mercredi 22 Janvier 2014 à 18:34 par Stephane :
Bonjour,
J'aimerais écrire une petite fonction qui arrondit de façon
"souple" en
supérieur.
Par ex :
5 => 10
20 => 50 (voire 100)
140 => 200
J'ai essayé avec ceil() et log10(), mais ça m'arrondit trop haut
(140 me donne 1000 par exemple)
Merci.
bjr chers membres. j'ai un projet d'un jeu tetris. seulement je compte remplacer les blocs par des lettres du genre N-C-O-H. car je compte plutôt construire des molécules chimiques, et avec leurs différentes liaisons, aussi le programme doit être capable de donner le nom de la molécule après l'avoir construit. je sais que je devrais introduire toutes les combinaisons moléculaires. je voudrais le faire en langage c mais seulement je n'arrive pas encore à savoir comment m'y prendre pourtant je connais le programme du tetris normal. ok je vous pris de m'aider même avec ne serait-ce qu'un brainstorming
Le mercredi 22 Janvier 2014 à 18:34 par Stephane :
Bonjour,
J'aimerais écrire une petite fonction qui arrondit de façon "souple" en supérieur. Par ex : 5 => 10 20 => 50 (voire 100) 140 => 200
J'ai essayé avec ceil() et log10(), mais ça m'arrondit trop haut (140 me donne 1000 par exemple)
Merci.
bjr chers membres. j'ai un projet d'un jeu tetris. seulement je compte remplacer les blocs par des lettres du genre N-C-O-H. car je compte plutôt construire des molécules chimiques, et avec leurs différentes liaisons, aussi le programme doit être capable de donner le nom de la molécule après l'avoir construit. je sais que je devrais introduire toutes les combinaisons moléculaires. je voudrais le faire en langage c mais seulement je n'arrive pas encore à savoir comment m'y prendre pourtant je connais le programme du tetris normal. ok je vous pris de m'aider même avec ne serait-ce qu'un brainstorming