Identification de caracteres [Résolu]

cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 5 juil. 2005 à 10:26 - Dernière réponse : cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention
- 5 juil. 2005 à 22:31
Je voudrais faire un programme en VB qui met sous forme fractionnaire les nombres à écriture décimale infinie ( exemple 0.35353535....=35/99 ).

Il ne me manque plus que deux elements c'est de savoir comment avec un nombre je peux identifier le cycle que présente l'écriture décimale (ici 35, on observe une successin de 35dans l'écriture).

Et comment trouver que le nombre chiffres composant ce cycle ( ici 2 , car 35 est composé de 2 chiffres)

J'espere avoir été assez précis et compréhenssible

D'avance merci.
Afficher la suite 

7 réponses

Meilleure réponse
cs_phil23 79 Messages postés mardi 23 septembre 2003Date d'inscription 14 juillet 2005 Dernière intervention - 5 juil. 2005 à 16:12
3
Merci
'J'ai fais cet exemple en VB6 qui pourrait fonctionner.
'Colle cette fonction dans un form pour tester.

Private Sub RechercheSuite()


Dim ValeurTest As Double 'Variable qui contient la valeur à tester
Dim ValeurTemp As Single 'Variable temporaire pour déterminer le séparateur
'numérique du système (point ou virgule)
Dim sSep As String 'Séparateur numérique du système
Dim lPos As Long 'Position du séparateur dans la variable ValeurTest
Dim sDecimale As String 'Partie décimale de la valeur à tester
Dim i As Long 'Compteur de la boucle 1
Dim j As Long 'Compteur de la boucle 2
Dim sBloc As String 'Bloc de chiffre à comparer
Dim sExtrait As String 'Bloc suivant à comparer avec sBloc
Dim bIdentique As Boolean 'Est-ce que la comparaison est identique ?
Dim lCompteur As Long 'Compte le nombre de comparaison


'Mettre ici la valeur à tester
'---------------------------------------------
ValeurTest = (35 / 99) 'Résultat: 35 2
'ValeurTest = (569 / 999) 'Résultat: 569 3
'ValeurTest = 0.333333343333333 'Résultat: 3 1
'ValeurTest = 0.123456123456 'Résultat: 123456 6
'ValeurTest = 0.375962451655 'Résultat: Impossible de trouver une suite
'---------------------------------------------

'Détermine quel est le séparateur numérique du système
'---------------------------------------------
ValeurTemp = (1 / 10)
sSep = Mid(CStr(ValeurTemp), 2, 1)
'---------------------------------------------

'Recherche la position du séparateur numérique
lPos = InStr(1, CStr(ValeurTest), sSep)
If lPos > 0 Then
'Extrait que la partie décimale
sDecimale = Mid(CStr(ValeurTest), lPos + 1)

'Fait une boucle du nombre de chiffre
For i = 1 To Len(sDecimale)
sBloc = Left(sDecimale, i)

lCompteur = 0
bIdentique = True
'Compare par bloc avec la suite pour déterminer si c'est identique
For j = (i + 1) To Len(sDecimale) Step i
sExtrait = Mid(sDecimale, j, i)
If Len(sExtrait) = Len(sBloc) Then
lCompteur = lCompteur + 1
If sBloc <> Mid(sDecimale, j, i) Then bIdentique = False
End If
If bIdentique = False Then Exit For
Next j If lCompteur 0 Then bIdentique False

If bIdentique = True Then Exit For
Next i

If bIdentique = True Then
MsgBox "La suite de chiffre est: " & sBloc & vbCrLf & _
"Le nombre de chiffres composant est: " & Len(sBloc), vbInformation
Else
MsgBox "Impossible de déterminer une suite logique.", vbExclamation
End If

Else
MsgBox "C'est un nombre entier. Il n'y a pas de séparateur.", vbExclamation
End If

End Sub

Merci cs_phil23 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Meilleure réponse
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 5 juil. 2005 à 16:52
3
Merci
Je ne comprends pas comment utiliser cette fonction

Merci cs_Julien39 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Meilleure réponse
Gobillot 3140 Messages postés vendredi 14 mai 2004Date d'inscription 31 mars 2015 Dernière intervention - 5 juil. 2005 à 17:53
3
Merci
si c'est une suite de chiffres limités forcément c'est plus facile,

j'ai pas dit que c'était facile, mais ça donne pas le résultat exact à savoir si c'est un nombre rationnel ou pas.



un nombre rationnel peut se mettre se mettre sous forme de fraction.

soit c'est un nombre entier comme 10/2

soit c'est un nombre avec décimale limitée comme 6/5

soit c'est un nombre avec décimale illimitée comme 1/3 mais avec séquence répétitive.



pour les nombres irrationnels, on ne peut pas les mettre sous forme de
fraction, le nombre de décimale est illimitée, et on peut considérer
qu'il n'y a pas de séquence répétitive, mais je suis pas sûr que ça a
été prouvé ?



conclusion:

si on arrive a le mettre sous forme de fraction et si c'est pas un
nombre entier et si le nombre de décimales est illimité là on est sûr
qu'il y a une séquence répétive.

il reste plus qu'à la trouver.


Daniel

Merci Gobillot 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Meilleure réponse
cs_phil23 79 Messages postés mardi 23 septembre 2003Date d'inscription 14 juillet 2005 Dernière intervention - 5 juil. 2005 à 21:48
3
Merci
OK, je ne savais pas que tu es débutant.
Mon exemple est fait avec VB6. Je ne sais même pas si tu as aussi cette version ou VB.net ou quoi?


Si tu as VB6 tu peux:
1. Ouvrir un nouveau projet
2. Ajouter un bouton "Command1" sur le "Form1"
3. Ouvre la fenêtre code du Form1
4. Efface tout le code (si il y a quelque chose)
5. Copier le code ci-dessous et le coller dans le Form1
6. Exécuter le projet et cliquer sur le bouton pour tester



' Code à copier et coller
'----------------------------------
Option Explicit


Private Sub RechercheSuite(ByVal MonNombre As String)


Dim ValeurTemp As Single 'Variable temporaire pour déterminer le séparateur
'numérique du système (point ou virgule)
Dim sSep As String 'Séparateur numérique du système
Dim lPos As Long 'Position du séparateur dans la variable ValeurTest
Dim sDecimale As String 'Partie décimale de la valeur à tester
Dim i As Long 'Compteur de la boucle 1
Dim j As Long 'Compteur de la boucle 2
Dim sBloc As String 'Bloc de chiffre à comparer
Dim sExtrait As String 'Bloc suivant à comparer avec sBloc
Dim bIdentique As Boolean 'Est-ce que la comparaison est identique ?
Dim lCompteur As Long 'Compte le nombre de comparaison


'Détermine quel est le séparateur numérique du système
'---------------------------------------------
ValeurTemp = (1 / 10)
sSep = Mid(CStr(ValeurTemp), 2, 1)
'---------------------------------------------

'Recherche la position du séparateur numérique
lPos = InStr(1, CStr(MonNombre), sSep)
If lPos > 0 Then
'Extrait que la partie décimale
sDecimale = Mid(CStr(MonNombre), lPos + 1)

'Fait une boucle du nombre de chiffre
For i = 1 To Len(sDecimale)
sBloc = Left(sDecimale, i)

lCompteur = 0
bIdentique = True
'Compare par bloc avec la suite pour déterminer si c'est identique
For j = (i + 1) To Len(sDecimale) Step i
sExtrait = Mid(sDecimale, j, i)
If Len(sExtrait) = Len(sBloc) Then
lCompteur = lCompteur + 1
If sBloc <> Mid(sDecimale, j, i) Then bIdentique = False
End If
If bIdentique = False Then Exit For
Next j If lCompteur 0 Then bIdentique False

If bIdentique = True Then Exit For
Next i

If bIdentique = True Then
MsgBox "La suite de chiffre est: " & sBloc & vbCrLf & _
"Le nombre de chiffres composant est: " & Len(sBloc), vbInformation
Else
MsgBox "Impossible de déterminer une suite logique.", vbExclamation
End If

Else
MsgBox "C'est un nombre entier. Il n'y a pas de séparateur.", vbExclamation
End If

End Sub


Private Sub Command1_Click()

Call RechercheSuite(InputBox("Entrer le chiffre à tester:", "Chiffre", "0.35353535353535353535"))

End Sub

Merci cs_phil23 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Gobillot 3140 Messages postés vendredi 14 mai 2004Date d'inscription 31 mars 2015 Dernière intervention - 5 juil. 2005 à 12:13
0
Merci
je doûte qu'on puisse faire cela

je citerais en exemple les décimales de Pi,

après quelques 2 milliards de décimales calculées, personne n'a encore prouvé qu'il y avait ou pas de séquences répétitives.

les nombres garderont toujours leurs mystères.

Daniel
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 5 juil. 2005 à 12:33
0
Merci
Ecrire un nombre a écriture décimale infini et CYCLIQUE est possible comme pour 0.35353535=35/99

Demonstration

Soit n = 0.569569569569....
On remarque un cycle 569...
1000n = 569.569569...
1000n = 569 + 0.569569...
1000n = 569 + n
1000n - n =569
999n = 569
n = 569/999

Donc 0.569569569...=569/999

Pour pi c'est différent, on observe pas de cycle dans son écriture on ne peut donc pas l'écrire sous forme fractionnaire.
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 5 juil. 2005 à 22:31
0
Merci
Merci d'avoir passé du temps à trouver une répose et a me l'expliquer aussi clairement

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.