Inscription / Connexion Nouveau Sujet
Niveau terminale
Partager :

Exercice sur les factorielles avec logiciel

Posté par
caps09
19-10-16 à 13:47

Bonjour à tous et toutes, j'ai un exercice à faire en spé et j'avoue que je suis vraiment perdue.
Voici l'énoncé:
1)a) Calculer 2!, 3!, 4!
b) Avec le logiciel XCas, calculer 21!, 52! 103!

2a) On a programmé avec le logiciel Cas une fonction déterminant le nombre de zéros terminant  (à droite) l'écriture décimale de l'entier n.
Le programme est:  
nbZero(n):={
local compteur, q;
compteur:=0;
q:=n/10
tant que q==floor(q) faire
..............................;
q:=q/10
ftantque;
retourne compteur;
}:;

Une ligne a été effacée. Quelle peut-être cette ligne?
Tester le bon fonctionnement du programme en entrant nbZero(5300)dans une ligne de commande.

b)On propose un autre programme ayant le même rôle:
nbZ(n):={
local c,p;
c:=1
p:=10^c
tant que irem (n,p)==0 faire
c:=c+1
p:=10^c
ftantque;
retourne.......................;}:;

Compléter la dernière ligne. Tester le bon fonctionnement.

c) La fonction factoriser_entier() du logiciel Xcas retourne  la factorisation en nombres premiers de l'entier donnée en argument. Al'aide de cette instruction et des questions précédentes, conjecturer le nombre de zéros terminant l'écriture décimale de n!

3)a) Programmer une fonction nbCinq(m) dont l'entrée m est un entier naturel et dont la sortie est l'exposant de 5 dans la décomposition de m en facteurs premiers.
b) On définit la séquence suivante: seq(nbCinq(n!)-nbZero(n!),n,1,100)
Quel affichage s'attend-on à obtenir? Vérifier.
c) Justifier que l'exposant de 5 dans la décomposition en facteurs premiers de n! est toujours inférieur à l'exposant de 2 dans cette décomposition .
d) Démontrer la conjecture faite à la question 2c)

Je n'ai réussi qu'à faire le 1. Je n'ai jamais utilisé ce logiciel et je n'y comprends rien.
Voici mes réponses:
2!=1*2=2
3!=1*2*3=6
4!=1*2*3*4=24

21!=5,1090942*10^19
52!=8,0658175*10^67
103!=9,902901*10^163


Merci d'avance à ceux qui prendront le temps de me lire et peut-être de m'aider.

Posté par
mathafou Moderateur
re : Exercice sur les factorielles avec logiciel 19-10-16 à 14:02

Bonjour,
on te demande de le faire avec Xcas c'est pour une bonne raison !

la calculette est largement insuffisante pour répondre aux questions posées.

21!=5,1090942*10^19 faux
Xcas donne la valeur exacte (c'est pour ça qu'on demande de le faire avec Xcas)

21! = 51090942171709440000

Xcas est gratuit et si tu ne veux pas l'installer, tu peux toujours l'utiliser "en ligne"
par exemple là

Posté par
caps09
re : Exercice sur les factorielles avec logiciel 19-10-16 à 15:49

Merci ! Mais je l'ai installé et je ne comprends vraiment rien aux algorithmes, je ne comprends même pas les questions... Ne pourriez-vous pas m'aider s'il vous plaît?

Posté par
mathafou Moderateur
re : Exercice sur les factorielles avec logiciel 19-10-16 à 16:16

les algorithmes ici c'est quasiment du français
"tant que" est une boucle que l'on exécute tant que (expression française courante) la condition qui est écrite derrière est vraie

c'est quoi cette condition ?
c'est "q est il égal à la partie entière de q"
(floor() = "partie entière de" : lire la doc de Xcas, mais c'est standard pour presque tous les logiciels cette fonction là)

dans quel cas un nombre n'est il pas égal à sa partie entière ?

cela te donnera la condition d'arrêt de la boucle

maintenant que fait-on dans cette boucle ?
on fait deux choses
- l'opération mystère que l'on demande dans la question (compléter les "...")
- et on divise q par 10

si on regarde d'un peu plus loin l'algorithme on remarque une variable "compteur" qui est le résultat que l'on affiche à la fin :
retourne compteur;
veut dire que ce programme "retourne" (renvoie, répond) la valeur de la variable compteur.

qu'affichera-t-on si on ne met rien à la place des ... ??
que vaudrait compteur depuis le début ? a-t-il été modifié ?
et donc tu l'as la ligne manquante !


pour la question b, on utilise une fonction irem()
voir dans la doc ce qu'elle calcule.

qu'est ce qu'on pourrait bien "retourner" à la fin du programme ?
(pareil que pour la a)


comme tout cet exercice à pratiquement comme seul but la prise en main du logiciel Xcas, il faut apprendre à se débrouiller avec
(lire la doc, essayer : ça ne mord pas etc c'est comme pour n'importe quel logiciel)

Posté par
caps09
re : Exercice sur les factorielles avec logiciel 19-10-16 à 16:24

Je pense avoir compris pour le 2)
a)   je pense que la ligne manquante est:
compteur:=compteur+1;
b), je pense que c'est:
retourne c-1
c),ah, si, il faut compter les 5
le nombre de 0 à la fin, c'est la puissance de 5 quand on fait la décomposition de n!

En revanche le 3) je ne vois vraiment pas

Posté par
mathafou Moderateur
re : Exercice sur les factorielles avec logiciel 19-10-16 à 16:56

OK

2c : ceci est une conjecture (sera démontrée question 3c pour affirmer qu'il y au moins autant de 2 que de 5)

3a)
on te demande de fabriquer toi-même un algorithme

comment ferais tu à la main pour répondre à la question ? (pas de machine pas d'algorithme, juste quelle méthode)
(diverses possibilité de méthodes pour faire ça)

traduire alors une de ces méthodes (au choix) en un algorithme
c'est à dire décrire précisément et exactement les opérations et l'enchainement de ces opérations (en français et formules)

alors la traduction de cet algorithme en langage Xcas sera assez facile

mais il faut commencer par le commencement :
comment peut on faire à la main pour obtenir l'exposant de 5 dans la décomposition en facteurs premiers ?

Posté par
caps09
re : Exercice sur les factorielles avec logiciel 19-10-16 à 17:18

merci. je ne comprends vraiment pas

Posté par
mathafou Moderateur
re : Exercice sur les factorielles avec logiciel 19-10-16 à 18:00

de toute façon je dois quitter.
pas le temps de te faire un cours sur comment on peut faire à la main pour compter l'exposant de 5 dans une décomposition à la main en facteurs premiers (ou pas d'ailleurs, on s'en fiche des autres facteurs premiers) !!!

parce que je suis persuadé que tu sais le faire, à la min avec une feuille de papier

simplement que le seul mot "Xcas" et "algorithme" te bloque complètement pour uniquement des raisons purement psychologiques.

comment ferais tu à la main pour calculer l'exposant de 5 dans la décomposition de 18046875 (au hasard)

Posté par
vham
re : Exercice sur les factorielles avec logiciel 19-10-16 à 21:05

Bonsoir,

Avec XCas la commande factoriser_entier(21!) donne
2^18*3^9*5^4*7^3*11*13*17*19
Voici pour exemple un programme en Visual Basic (mode console) qui extrait l'exposant du nombre 5
(dim est une commande de déclaration d'une variable)
(l'apostrophe débute un commentaire sur le restant de la ligne)

Dim n As String = "2^18*3^9*5^4*7^3*11*13*17*19"
        Dim p As String = "5"
        If n.Contains(p) Then
            Dim i As Integer = InStr(n, p) 'premier caractère en position 1
            i += -1 + p.Length 'premier caractère à l'indes i=0
            Dim e As Integer = 0 ' e sera l'exposant trouvé
            If n.ElementAt(i) = "^" Then 'y-a-t'il un exposant ?
                Dim j As Integer = i + 1 'reconstituer l'exposant chiffre à chiffre
                While IsNumeric(n.ElementAt(j))
                    e = e * 10 + Val(n.ElementAt(j)) 'Val convertit le caractère en chiffre
                    j += 1
                End While
            Else
                e = 1
            End If
            Console.WriteLine(p & "^" & e)
        Else
            Console.WriteLine("p n'est pas un facteur premier de n")
        End If

Posté par
vham
re : Exercice sur les factorielles avec logiciel 19-10-16 à 21:26

re Bonsoir

dans mon programme-exemple , après

If n.Contains(p) Then
            Dim i As Integer = InStr(n, p)

il faut impérativement tester " si i>1 alors le caractère qui précède le p trouvé est * "
car un exposant d'un nombre premier inférieur à p pourrait valoir p....

Une astuce est : ajouter * en tête de la chaine n
et rechercher p="*5" au lieu de simplement p="5"   : Pas si simple de construire un algorithme opérationnel !

Posté par
vham
re : Exercice sur les factorielles avec logiciel 19-10-16 à 23:33

re Bonsoir,

Trouver l'exposant du facteur premier 5 dans 21!

Dim nombre As BigInteger 'créer 21!
        nombre = 1
        For i = 1 To 21
            nombre *= i
        Next

        Dim d As BigInteger
        d = 5
        Dim exp As Integer = 0
        Do
            If BigInteger.Remainder(nombre, d) = 0 Then
                nombre /= d
                exp += 1
            Else
                Exit Do
            End If
        Loop
        Console.WriteLine("l'exposant de " & d.ToString & " est " & exp)

Posté par
mathafou Moderateur
re : Exercice sur les factorielles avec logiciel 20-10-16 à 12:37

re,

d'une part on demande de le faire avec Xcas et ensuite il s'agit encore et toujours de ne pas brûler les étapes

par quelle méthode décrite avec des mots je vais trouver

cette étape est absolument indispensable avant d'imaginer écrire la moindre ligne de code que ce soit
et doit être faite explicitement


donc ici il se dégage deux méthodes principales :

- décomposer N en facteurs premiers et "lire" dans cette décomposition l'exposant de 5

autre méthode
- diviser par 5 autant qu'on peut (tant que ça donne un nombre entier) et le nombre de fois qu'on aura pu diviser par 5 est l'exposant de 5 dans la décomposition (j'écrivais bien "ou pas")

cette deuxième méthode ressemble tellement à "combien de fois on a pu diviser par 10 pour trouver le nombre de zéros à la fin" que l'algorithme pour la réaliser est quasiment le même que celui qui a déja été écrit !!!

je le rappelle :

nbZero(n):={
local compteur, q;
compteur:=0;
q:=n/10
tant que q==floor(q) faire
compteur = compteur+1; // ligne ajoutée qui faisait l'objet de la question d'avant
q:=q/10
ftantque;
retourne compteur;
}:;

j'ai mis en rouge le seul truc à modifier pour obtenir l'exposant de 5 !!
la modification est instantanée (et changer le nom du programme bien entendu )

Posté par
vham
re : Exercice sur les factorielles avec logiciel 20-10-16 à 13:56

Bonjour,

A mathafou : Vous donnez des solutions absolument précises et dans le droit fil de l'exercice. Très bien, mais...
en l'occurrence, et sans doute en raison d'une connaissance insuffisante de la programmation XCas, on ne voit pas quel type de données sont manipulées, ni quelles divisions sont effectuées (q:=n/10) alors que c'est toujours connu en typage statique (C,C++, VB.net,..) ou dynamique (Python, différence entre q/10 et q//10) : Ce sont les comparaisons qui risquent d'être illusoires ( q==floor(q) )...

Posté par
mathafou Moderateur
re : Exercice sur les factorielles avec logiciel 20-10-16 à 14:15

on est d'accord que cet exercice n'est pas "portable" tel quel dans un autre langage
il n'empêche que quel que soit le langage la méthodologie est toujours la même pour analyser le problème avant d'écrire la moindre ligne de code

et ensuite on traduit l'algorithme (dans lequel on ne se pose pas de questions sur la taille des mots de la machine etc) en un programme.
et en adaptant ce codage aux particularités du langage utilisé, aux caractéristiques "physiques" sur le codage dans la machine des "nombres" mathématiques.

l'algorithme est une représentation purement "mathématique" et idéalisée des opérations à effecteur
en mathématique les nombres entiers sont des nombres entiers et c'est tout et une division donne un nombre réel "idéal" avec toute son infinité de décimales au besoin.

c'est à la traduction de cet algorithme "en machine" qu'on se posera ce genre de questions.
et on est parfaitement d'accord que là il faudra bien se poser ces questions de précision, de types de nombres etc.

tu as raison de le faire remarquer "au plus tôt" même si ça passe inaperçu en Xcas qui choisit de lui même la précision "suffisante" sans rien en dire à l'utilisateur.
en être conscient rapidement dans l'apprentissage de la programmation est indispensable.



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Inscription gratuite

Fiches en rapport

parmi 1675 fiches de maths

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !