Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 18/05/2008, à 04:29

Chiuchu

Maths -- Voyons si vous saurez répondre.

Salut,

je me pose une question toute bête de logique/mathématique depuis pas mal de temps, et je n'arrive pas à la résoudre.

Il s'agit, par un calcul, de savoir de combien de chiffres est composé un nombre X.
Prenons l'exemple de X = 45123. Il faut, par un calcul mathématique, retrouver 5.
Evidement, ce calcul sera applicable à toute valeur de X.

En termes plus scolaires, il s'agît de retrouver l'expression de la fonction qui à tout x associe son nombre de chiffres.

Dans le cas où ce serait impossible, démontrez en quoi.

Des propositions ?

+

Dernière modification par Chiuchu (Le 18/05/2008, à 04:40)

Hors ligne

#2 Le 18/05/2008, à 05:50

bloublou

Re : Maths -- Voyons si vous saurez répondre.

python :

x = 45123
i = 0
while x:
    i += 1
    x /= 10
print i

c :

int main(void)
{
 int i = 0;
 int x = 45123;
 while (x)
  {
    x /= 10;
    i++;
  }
printf("%d\n", i);
}

Bon, par contre, en maths j'en sais rien big_smile

Dernière modification par louizatakk (Le 18/05/2008, à 05:51)

Hors ligne

#3 Le 18/05/2008, à 06:12

Astrolivier

Re : Maths -- Voyons si vous saurez répondre.

salut,

0.1 < (X / 10^y) <  1 ;   y = entier naturel     

ça doit être une histoire comme ça non ?


S'il faut absolument faire des sacrifices pour assurer le progrès de l'humanité, ne serait-il pas indispensable de s'en tenir au principe selon lequel c'est à ceux dont on exige le sacrifice que la décision doit revenir en dernier ressort ? (howard zinn)

Hors ligne

#4 Le 18/05/2008, à 08:40

Brunod

Re : Maths -- Voyons si vous saurez répondre.

Une autre perspective hors mathématique :
convertir en chaine de caractère et mesurer sa longueur donne le même résultat.
A adapter pour les - et ,
BD


Windows est un système d'exploitation de l'homme par l'ordinateur. Linux, c'est le contraire...
39 pc linux convertis

Hors ligne

#5 Le 18/05/2008, à 08:54

Poisson25

Re : Maths -- Voyons si vous saurez répondre.

Bonjour,

Il suffit de faire E( log(X) ) + 1. où :
- E est la fonction partie enière ( ex : E(29,127) = 29 )
- log est la fonction logarithme en base 10. Voir ici où c'est bien expliqué.

C'était pas si dur que ça !!! lol


Portable : Archlinux
Clé usb : SliTaz

Hors ligne

#6 Le 18/05/2008, à 09:06

Get-Get

Re : Maths -- Voyons si vous saurez répondre.

Je vois une méthode mathématique, mais qui nécessite un arrondi au supérieur.
Bref ca marche dans la plupart des cas, mais c'est pas super propre :

Appelons ton chiffre : constante "A"
On va le diviser par 10^x jusqu'à obtenir une valeur < 1. C'est a dire qu'on va utiliser la virgule comme un petit doigt lol qui va nous permettre de compter le nombre de chiffre :

Cela revient a résoudre : A/(10^x)<1

Rappelons juste une petite chose : log(10)=1 et log(10^x)=x*log(10) donc log(10^x)=x


A/(10^x) < 1
(10^x) > A
log(10^x) > log(A)
x*log(10) > log(A)
x>log(A)

On à donc x:"nombre de chiffre". x est strictement supérieur à log(A), mais doit être un entier positif.
Ainsi :
pour x>2.5 on prendra 3
pour x>2 on prendra 3 aussi car 3 est le premier entier supérieur à 2

Attention, cela ne fonctionne pas dans ces cas :
pour A [0;1] cela ne fonctionne pas.
pour A ]-infini;0[ la résolution est impossible.


-------------grilled par Poisson25 ---------------------:P


Edit n°2 : Demain je passe les maths de mon exam de BTS !!!:o
Vous me mettriez combien tongue ?

Dernière modification par Get-Get (Le 18/05/2008, à 09:21)

Hors ligne

#7 Le 18/05/2008, à 09:53

berserk

Re : Maths -- Voyons si vous saurez répondre.

ouh la vous me donnez mal à la tête tongue

Hors ligne

#8 Le 18/05/2008, à 11:00

sonal

Re : Maths -- Voyons si vous saurez répondre.

Chiuchu a écrit :

En termes plus scolaires, il s'agît de retrouver l'expression de la fonction qui à tout x associe son nombre de chiffres.

La solution de poisson25 (log) est la plus courte, mais si il s'agit de réaliser l'operation le plus rapidement possible, je me demande si un ordinateur n'irait pas plus vite en suivant la proposition de louizatakk ...


Sonal

Patience et longueur de temps, font plus que force, ni que rage

Hors ligne

#9 Le 18/05/2008, à 11:14

Poisson25

Re : Maths -- Voyons si vous saurez répondre.

sonal a écrit :
Chiuchu a écrit :

En termes plus scolaires, il s'agît de retrouver l'expression de la fonction qui à tout x associe son nombre de chiffres.

La solution de poisson25 (log) est la plus courte, mais si il s'agit de réaliser l'operation le plus rapidement possible, je me demande si un ordinateur n'irait pas plus vite en suivant la proposition de louizatakk ...

Oui tu as raison, informatiquement la méthode de louizatakk est la plus simple. Le log pourrait être rapide si la librairie si elle était optimisée mais pour ce problème ça m'étonnerait qu'on y gagne beaucoup...

Tout ça pour compter le nombre de chiffres dans un nombre! big_smile


Portable : Archlinux
Clé usb : SliTaz

Hors ligne

#10 Le 18/05/2008, à 14:11

Joss17

Re : Maths -- Voyons si vous saurez répondre.

C'est effectivement au niveau mathématique un calcul de logarithme.

Je ne suis pas convaincu que la méthode de louizatakk soit la plus rapide, il y a peut être un algorithme qui utiliserai des division par 2 qui pourrait être plus rapide.

Hors ligne

#11 Le 18/05/2008, à 14:18

Joss17

Re : Maths -- Voyons si vous saurez répondre.

on pourrait stocker la valeur de Ln(10) / Ln(2) (qu'on appellerait C ) et utiliser l'algorithme de Louizatakk mais avec des divisions par 2 (plus rapide) puis retrouver le logaritme en multipliant par C.

Hors ligne

#12 Le 18/05/2008, à 14:30

tenSe

Re : Maths -- Voyons si vous saurez répondre.

Il faut tout simplement chopper la partie entière du log.
Tu peux faire ça en maple en faisant log(nombre) puis en récupérant le résultat de la division euclidienne par 1 smile.


tenSe
( utilisateur d'Arch / CentOS / Ubuntu, intéressé par le traitement du signal temps réel et par les productions artistiques open source de toutes sortes )

Hors ligne

#13 Le 18/05/2008, à 20:50

Chiuchu

Re : Maths -- Voyons si vous saurez répondre.

Salut,

Merci pour toutes ces réponses. Je dois donc faire l'arrondi supérieur du logarithme à base dix.

Ma prochaine question serait ... comment faire un arrondi supérieur en maths ?

Nan, j'rigole big_smile

Merci encore !

Hors ligne

#14 Le 18/05/2008, à 23:12

bill_raise

Re : Maths -- Voyons si vous saurez répondre.

Sinon il n'y a pas moyen de faire ca avec des congruences?

Hors ligne

#15 Le 19/05/2008, à 10:50

Nasman

Re : Maths -- Voyons si vous saurez répondre.

En assembleur il y a les opérations de logarithme qui permettent le calcul de:
log10(x)=log2(x).log10(2) avec x qui est un nombre flottant.

fldlg2            ;charge le logarithme de base 10 de 2
fld [adresse de la variable x]
fyl2x              ;calcule le logarithme de base 2 de la variable et multiplie par log10(2)

Autrement il y a les moyens de faire des divisions entières par 10 (sans utiliser les log)


PC fixe sous Bionic 64 bits et portable avec Focal 64 bits

Hors ligne

#16 Le 19/05/2008, à 11:03

tominardi

Re : Maths -- Voyons si vous saurez répondre.

en code, en passant l'entier en chaîne, ya les cardinal, en java au moins, et en C il me semble aussi ?
On a directement la longueur, pas de variable $i à utiliser.

Hors ligne

#17 Le 19/05/2008, à 13:03

bloublou

Re : Maths -- Voyons si vous saurez répondre.

python

i = 45123;
print len(str(i));

ca marche.

Hors ligne

#18 Le 23/05/2008, à 11:10

Francky 4 Doigts

Re : Maths -- Voyons si vous saurez répondre.

En Maple :

size := proc(n)
  length(n);
end proc;

puis

f := x -> size(x);

Question existentielle : pourquoi j'ai plotmr6.th.jpg  ??? yikes


Huh?

Hors ligne