Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Autres questions


Index du Forum » Autres questions » Programme Analyse de nombre
Nirsab Hors ligne Membre Points: 117 Défis: 0 Message

Programme Analyse de nombre

Posté le 14/02/2022 11:29

Bien le bonjour

Je suis en train de faire un programme d'analyse de nombre.
J'aimerais qu'il soit le plus complet possible.

- Pair ou Impair ?
- Nombre carré ?
- Nombre triangulaire ?
- Nombre premier ?
- Nombre appartenant à la suite de Fibonacci
- Nombre appartenant à la suite de Fermat
- Si vous avez d'autres idées...


Pour le moment, j'ai réussi à faire une partie pour savoir si mon nombre est pair ou impair.
Je bloque un peu pour la suite...
Je cherche à faire la partie Fibonacci, mais il faut que je sache aussi comment on programme pour savoir si c'est un carré parfait..

Bref, j'ai envie de de faire un programme collaboratif, si c'est possible...

Voici ce que j'ai déjà fait, mais je ne pense pas que ce soit la manière la plus ergonomique:

"Nombre à analyser"?→N
"Pair ou Impair ?:"
2→A
N Rmdr A→B
If B=0
Then "PAIR"◢
Else
If B≠0
Then "IMPAIR"◢
"Nombre carré ?:"


Et ça bloque ....


Que faire,svp ?

Merci pour votre aide.

A+
N


1, 2, 3 Suivante
Lephenixnoir Hors ligne Administrateur Points: 24574 Défis: 170 Message

Citer : Posté le 14/02/2022 11:33 | #


La décomposition en facteurs premiers serait un peu plus utile que le test de primalité, parce que ça révélerait aussi les puissances de 2 ou d'autres bases.

L'écriture en différente bases peut être utile, selon les usages.

Pour le test de parité tu peux faire plus court avec ⇒ :

N Rdmr 2→B
B=0⇒"PAIR"◢
B=1⇒"IMPAIR"◢

Et pour le carré parfait, personnellement je préfère recalculer le carré parce que les approximations sont toujours douteuses :

Int √N→B
B²=N⇒"CARRE PARFAIT"◢

Note que dès que tu as des nombres de plus de 14-15 chiffres les entiers ne sont plus représentés correctement (ça passe en notation scientifique et les chiffres des unités sont perdus) ce qui fait que pour Fibonacci, prendre N²±4 n'est pas forcément légitime ; si tu demandes par exemple pour N≥10⁸ la valeur ne sera pas calculée correctement.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Nirsab Hors ligne Membre Points: 117 Défis: 0 Message

Citer : Posté le 14/02/2022 11:47 | #


Merci

Pour la décomposition, on est d'accord que c'est bien ça ?

For 2→B To N/2
Frac (N/B)=0⇒B


Le B n'a pas d'incidence sur le début du programme ?
La réussite commence avec la volonté d'essayer

Mes programmes
Clique APRES y avoir jeté un oeil

Lephenixnoir Hors ligne Administrateur Points: 24574 Défis: 170 Message

Citer : Posté le 14/02/2022 15:14 | #


Pas tout à fait, ça ça te donne la liste des diviseurs mais pas la multiplicité. Pour avoir la multiplicité, il faut diviser N quand tu trouves un diviseur et continuer la recherche au même point.

Là tu testes aussi tous les nombres pairs plus grands que 2, ce qui ne sert à rien (ils ne sont pas premiers) et tous les nombres entre √N+1 et N/2, ce qui ne sert à rien non plus (ils ne divisent pas N).
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Nirsab Hors ligne Membre Points: 117 Défis: 0 Message

Citer : Posté le 14/02/2022 15:35 | #


Oooook...
du coup, je suis perdu...

Il faudrait donc que je cale un While quelque part ? Mais où?
La réussite commence avec la volonté d'essayer

Mes programmes
Clique APRES y avoir jeté un oeil

Lephenixnoir Hors ligne Administrateur Points: 24574 Défis: 170 Message

Citer : Posté le 14/02/2022 15:48 | #


Essaie quelque chose comme ça (j'ai mis des espaces par clarté mais tu ne peux pas les taper). Note la partie importante qui est que si D divise M une fois alors on n'augmente pas D pour voir si il divise plusieurs fois. Et on divise M au fur et à mesure pour contempler uniquement les facteurs restants. Ici je teste toujours les multiples de 2 autres que 2, ce qui est assez lent, mais pour l'exemple c'est déjà pas mal.

// Copier N puisqu'on va le modifier
N→M
// Diviseur qu'on est en train de tester
2→D

// On s'arrête dès que D > √M pour gagner du temps
While D²≤M
  If M Rmdr D=0:Then
    // On a un diviseur
    D◢
    M÷D→M
  Else
    // Passer au diviseur suivant
    D+1→D
  IfEnd
WhileEnd

// À la fin il reste un nombre premier
// (Si N=1 il reste 1, et si N<1 il n'y a pas de décomposition)
M≠1⇒M◢

Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Nirsab Hors ligne Membre Points: 117 Défis: 0 Message

Citer : Posté le 14/02/2022 16:13 | #


Merci, je comprends mieux

Maintenant, est-il possible que le programme m'affiche ''oui'' ou ''non'' s'il est premier ou pas, mais également mettre les diviseurs...

(pas sais je clair si suis...)

Je comprends surtout que j'ai beaucoup perdu, mine de rien...
La réussite commence avec la volonté d'essayer

Mes programmes
Clique APRES y avoir jeté un oeil

Lephenixnoir Hors ligne Administrateur Points: 24574 Défis: 170 Message

Citer : Posté le 14/02/2022 16:27 | #


Pas de souci. Pour savoir s'il est premier ou pas, tu peux simplement tester à la fin s'il te reste toujours N (puisque ça signifie que la ligne M÷D→M n'a pas été exécutée, et donc qu'aucun facteur premier n'a été trouvé) :

// À la place de :
M≠1⇒M◢
// On peut faire :
M≠1⇒M◢
Frac N=0 And N≥2 And M=N⇒"PREMIER"◢

On vérifie quand même calmement que N est un entier ≥ 2, la dernière chose qu'on voudrait ce serait de taper π et qu'il nous dise premier !!

Pour afficher la liste des facteurs, c'est ce qui est fait actuellement de façon crue avec le symbole "◢". Mais pour faire plus ergonomique tu peux les stocker dans une liste (tutoriel ici) et ensuite afficher la liste avec "◢", ce qui donne une vue interactive.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Shadow15510 Hors ligne Administrateur Points: 5503 Défis: 18 Message

Citer : Posté le 14/02/2022 16:34 | #


Bah quoi ? π = e = 3 c'est bien premier, je vois pas de problème. C.Q.F.D.
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Nirsab Hors ligne Membre Points: 117 Défis: 0 Message

Citer : Posté le 14/02/2022 16:43 | #


J'ai juste modifié la fin
M≠1⇒M◢
Frac N=0 And N≥2 And M=N⇒"OUI"◢
A cet endroit, on peut inserer un 'sinon, afficher "non"'?
La réussite commence avec la volonté d'essayer

Mes programmes
Clique APRES y avoir jeté un oeil

Lephenixnoir Hors ligne Administrateur Points: 24574 Défis: 170 Message

Citer : Posté le 14/02/2022 16:44 | #


Oui, il faut juste utiliser If à la place de ⇒ :

M≠1⇒M◢
If Frac N=0 And N≥2 And M=N
Then "OUI"◢
Else "NON"◢
IfEnd

Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Shadow15510 Hors ligne Administrateur Points: 5503 Défis: 18 Message

Citer : Posté le 14/02/2022 16:45 | #


A cet endroit, on peut inserer un 'sinon, afficher "non"'?

Oui avec un test conditionnel

If Frac N=0 And N≥2 And M=N
Then "OUI"◢
Else "NON"◢
IfEnd

"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Nirsab Hors ligne Membre Points: 117 Défis: 0 Message

Citer : Posté le 14/02/2022 16:53 | #


Bah oui.... Tellement évident que je n'y ai même pas pensé...

Merci, maintenant, est-ce que j'ai ce qu'il me faut pour savoir si un nombre est un nombre triangulaire (1,3,6, 10 etc...), s'il fait partie de Fibonacci, de Fermat ? (pour l'instant je ne tiens pas compte de la longueur du nombre)

Ajouté le 14/02/2022 à 18:25 :
Pour les nombres triangulaire , la formule est
Si 8N+1 possède une racine carrée entière, alors N est triangulaire...
Comment on code ça en Basic, svp ?

J'ai presque honte de demander à tout le temps...
La réussite commence avec la volonté d'essayer

Mes programmes
Clique APRES y avoir jeté un oeil

Tituya Hors ligne Administrateur Points: 2156 Défis: 26 Message

Citer : Posté le 14/02/2022 18:29 | #


Si sqrt(8N+1) est un entier alors N est triangulaire.

En gros :

If Frac √(8N+1) = 0
Then "Triangulaire"
Else "Non"
IfEnd


Frac permet de donner la partie décimale. Si c'est = 0 il s'agit d'un nombre entier
Bretagne > Reste du globe
(Et de toute façon, vous pouvez pas dire le contraire)
Projet en cours : Adoranda

Mes programmes
Hésite pas à faire un test !


Lephenixnoir Hors ligne Administrateur Points: 24574 Défis: 170 Message

Citer : Posté le 14/02/2022 18:29 | #


Si 8N+1 possède une racine carrée entière, alors N est triangulaire...

Autrement dit, si 8N+1 est un carré parfait... déjà vu ?

Essaie de formuler mathématiquement ce que tu veux calculer à partir des opérations de base (indice : racine carrée, mise au carrée, partie entière, partie fractionnaire...). Ensuite ça devrait se formuler naturellement en Basic.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Nirsab Hors ligne Membre Points: 117 Défis: 0 Message

Citer : Posté le 14/02/2022 18:41 | #


Merci, j'avais l'idée mais je n'avais pas saisi que c'est frac qui permet d'avoir l'entier de la racine...
La réussite commence avec la volonté d'essayer

Mes programmes
Clique APRES y avoir jeté un oeil

Tituya Hors ligne Administrateur Points: 2156 Défis: 26 Message

Citer : Posté le 14/02/2022 18:46 | #


Je n'avais pas vu le message de Lephé plus haut concernant les approximations douteuses (notamment pour les grands nombres).

Applique plutôt ce message pour ta valeur plutôt que de passer par Frac
Bretagne > Reste du globe
(Et de toute façon, vous pouvez pas dire le contraire)
Projet en cours : Adoranda

Mes programmes
Hésite pas à faire un test !


Lephenixnoir Hors ligne Administrateur Points: 24574 Défis: 170 Message

Citer : Posté le 14/02/2022 18:46 | #


Nirsab a écrit :
Merci, j'avais l'idée mais je n'avais pas saisi que c'est frac qui permet d'avoir l'entier de la racine...

Non Frac c'est la fonction partie fractionnaire
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Nirsab Hors ligne Membre Points: 117 Défis: 0 Message

Citer : Posté le 14/02/2022 18:51 | #


Par contre, c'est curieux, quand je tape 6 ou 10 par exemple, le prog me dit que le nombre est triangulaire, mais si je tape 5, le prog ne m'indique pas que le nombre n'est pas triangulaire...
La réussite commence avec la volonté d'essayer

Mes programmes
Clique APRES y avoir jeté un oeil

Tituya Hors ligne Administrateur Points: 2156 Défis: 26 Message

Citer : Posté le 14/02/2022 18:57 | #


Tu es sûr de ne pas avoir oublié le Else ?

Au passage n'aie pas honte de demander, nous sommes tous passés par cette phase d'apprentissage
Bretagne > Reste du globe
(Et de toute façon, vous pouvez pas dire le contraire)
Projet en cours : Adoranda

Mes programmes
Hésite pas à faire un test !


Nirsab Hors ligne Membre Points: 117 Défis: 0 Message

Citer : Posté le 14/02/2022 18:58 | #


Je suis en train de m'embrouiller...
Avec les algos ressemblants...

Je crois qu'une pause s'impose....

Z'êtes là demain ?

Bonne soirée
La réussite commence avec la volonté d'essayer

Mes programmes
Clique APRES y avoir jeté un oeil

1, 2, 3 Suivante

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 170 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd