Un nombre X est dit porte-bonheur si ses chiffres forment une suite arithmétique de raison r, c'est-à-dire les chiffres de X sont ordonnés et la différence entre deux chiffres successifs est égale à une constante r.
Exemples :
1357 est un nombre porte-bonheur car ses chiffres sont ordonnés dans l’ordre croissant : 1<3<5<7 et la différence entre deux chiffres successifs est constante est égale à 2 8765 est un nombre porte-bonheur car ses chiffres sont ordonnés dans l’ordre décroissant : 8>7>6>5 et la différence entre deux chiffres successifs est constante est égale à -1.
3679 n’est pas un nombre porte-bonheur car la différence entre deux chiffres successifs n’est pas constante.
Ecrire un programme en Python qui permet de remplir un tableau T de n (5 ≤ N ≤ 30) entiers positifs de 4 chiffres, de chercher et d’afficher tous les entiers porte-bonheur du tableau T
Exemple : Pour N=6 et le tableau T suivant :
1234 | 9753 | 4596 | 2468 | 1033 | 7200 |
Le programme affiche : « les nombres porte-bonheur sont : 1234 9753 2468 »
Pour identifier les nombres "porte-bonheur" dans un tableau de nombres à 4 chiffres, il est nécessaire de vérifier si les chiffres de chaque nombre forment une suite arithmétique avec une raison constante. Voici comment concevoir l'algorithme pour ce problème :
1. Initialisation
Créer un tableau T
de taille N
, où 5 ≤ N ≤ 30
.
Remplir le tableau T
avec N
entiers positifs à 4 chiffres.
2. Vérification des nombres "porte-bonheur"
Pour chaque nombre dans le tableau T
:
a) Convertir le nombre en chaîne de caractères ou diviser successivement pour obtenir chaque chiffre.
b) Calculer la différence entre les deux premiers chiffres (d
).
c) Pour les chiffres suivants, vérifier que la différence entre chaque paire successive de chiffres est égale à d
.
d) Si toutes les différences sont égales à d, le nombre est considéré comme "porte-bonheur".
3. Affichage des résultats
Parcourir les résultats de la vérification et afficher tous les nombres "porte-bonheur" identifiés.
.Dans cet algorithme, On va utiliser 2 fonctions et 2 procédures :
Algorithme du programme principal
1 2 3 4 5 6 7 |
Algorithme nombres_riches Debut n<-saisie_taille() Ecrire('remplissage du tableau t') remplir(t,n) afficher_entiers_portebonheurs(t,n) Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
n | entier |
t | tableau des 100 entiers |
La fonction saisie_taille
Cette fonction retourne un entier n entre 3 et 30 saisi par l'utilisateur.
1 2 3 4 5 6 7 8 9 10 |
foncttion saisie_taille():entier Début Ecrire('donner un entier entre 5 et 30') lire (n) Tant que n<5 ou n>30 faire Ecrire('donner un entier entre 5 et 30') lire (n) Fin tant que retourner n Fin |
Déclaration des objets
Objet | Type / Nature |
n | entier |
La procédure remplir
Cette procédure remplit le tableau t de n entiers entre 1000 et 9999.
1 2 3 4 5 6 7 8 9 10 11 |
Procédure remplir(@t:Tab,n:entier) Début Pour i de 0 à n-1 faire Ecrire("donner elt N°",i," entre 1000 et 9999:") lire(t[i]) Tant que (t[i]<1000) ou (t[i]>9999) faire Ecrire("donner elt N°",i," entre 1000 et 9999:") lire(t[i]) Fin tant que Fin pour Fin |
Déclaration des objets
Objet | Type / Nature |
i | entier |
La fonction test_portebonheur
Cette fonction teste si un un nombre est porte-bonheur ou non .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Fonction test_portebonheur(n:entier):booleen Début ch<-Convch(n) d1<-Valeur(ch[1])-Valeur(ch[0]) d2<-Valeur(ch[1])-Valeur(ch[0]) i<-1 Tant que (d1=d2) et (i<long(ch)-2) faire d2<-Valeur(ch[i+1])-Valeur(ch[i]) i<-i+1 Fin tant que Si (d1=d2) alors retourner Vrai Sinon retourner Faux Fin si Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
d1 | entier |
d2 | entier |
ch | chaine des caracteres |
La procédure afficher_entiers_portebonheurs
Cette procédure identifie et affiche les nombres porte-bonheur.
1 2 3 4 5 6 7 8 9 |
Procédure afficher_entiers_riches(t:Tab,n:entier) Début Ecrire('les entiers porte-bonheurs sont:')) Pour i de 0 à n-1 faire Si test_portebonheur(t[i]) alors Ecrire(t[i]) # afficher les entiers porte-bonheur Fin si Fin pour Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
from numpy import array t=array([int()]*30) def saisie_taille() : n=int(input("donner un entier entre 5 et 30: ")) while(n<3) or (n>10) : n=int(input("donner un entier entre 5 et 30: ")) return n def remplir(t,n): for i in range (n) : t[i]=int(input("donner elt N°"+str(i)+" entre 1000 et 9999: ")) while (t[i]<1000) or (t[i]>9999) : t[i]=int(input("donner elt N°"+str(i)+" entre 1000 et 9999: ")) def test_portebonheur(n) : ch=str(n) d1=int(ch[1])-int(ch[0]) d2=int(ch[1])-int(ch[0]) i=1; while (d1==d2) and (i<len(ch)-2): d2=int(ch[i+1])-int(ch[i]) i=i+1 if (d1==d2) : return True else: return False def afficher_entiers_portebonheurs(t,n): print('les entiers portes bonheurs sont:') for i in range (n) : if test_portebonheur(t[i]): print(t[i]) #programme principal n=saisie_taille() print('remplissage du tableau t') remplir(t,n) afficher_entiers_portebonheurs(t,n) |
Exécution du programme
Pour remplir un tableau d'entiers à partir d'une chaîne de caractères en Python, vous pouvez suivre les étapes suivantes :
1- Découper la chaîne de caractères en sous-chaînes contenant les entiers.
2- Convertir chaque sous-chaîne en entier.
3- Ajouter chaque entier au tableau.
Pour créer une application en Python pour identifier et afficher les nombres riches
a- Ouvrez Qt Designer et créez un nouveau fichier de type Main Window.
b- Ajoutez ces widgets:
QLineEdit
nommé 'ch' pour entrer des entiers .
QPushButton
nommé 'remplir_bt' pour exécuter le module createTab afin de remplir le tableau à partir de la chaine 'ch'.
QPushButton
nommé 'bt_recherche' pour exécuter le module afficher_entiers_portebonheurs.
QLabel
nommé 'msg' pour afficher un message d'erreur si ch est vide ou contient des valeurs non numériques ou les éléments du tableau non formé de 4 chiffres.
QLabel
nommé 'tab_label' pour afficher les éléments du tableau T.
QLabel
nommé 'resultat' pour afficher les entiers porte-bonheur.
Enregistrez le fichier avec l'extension .ui
, par exemple tabtab-2.ui
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
from PyQt5.uic import loadUi from PyQt5 import QtCore, QtGui from PyQt5.QtWidgets import * from PyQt5 import QtCore, QtGui, QtWidgets from numpy import array t=array([int()]*100) app = QApplication([]) windows = loadUi ("tabtab-2.ui") # Fonction qui supprime des espaces de la chaine des carcatères def supprimer_espaces (ch) : while(ch[0]==' '): # elimnier tous les espaces au début de la chaine ch=ch[1:len(ch)] while(ch[len(ch)-1]==' '): # elimnier tous les espaces a la fin de la chaine ch=ch[0:len(ch)-1] while (ch.find(' ')>0): ch=ch.replace(" ", " ") # remplacer les doubles espaces apar un seul espace return ch # Procedure qui remplit un tableau par des entiers a partir d'une chaine des caractère def createTab(): ch = windows.ch.text() global n # pour la taille di tableau if ch=="": windows.msg.setText("Veuillez remplir la chaîne") else: windows.msg.clear() # effacer le message d erreur ch= supprimer_espaces(ch) i=0 j=0 ch1='' test_4chiffres=True # parcourir les caracteres de la chaine while((i<len(ch)) and (test_4chiffres) and (('0'<=ch[i]<='9') or (ch[i]==' '))): if ('0'<=ch[i]<='9'): ch1=ch1+ch[i] if ((ch[i]==' ') or (i==len(ch)-1)) : t[j]=int(ch1) ch1='' if t[j]<1000 or t[j]>9999 : test_4chiffres=False j=j+1 i=i+1 if (i<len(ch)) or (test_4chiffres==False): windows.msg.setText("la chaine doit contenir des nombre entre 1000 et 9999") else : if 5<=j<=30: # test du taille du tableau n=j tab='' for k in range (j) : tab=tab+ 't['+str(k)+']= '+ str(t[k])+ '\n' #afficher les elements du tableau windows.tab_label.setText(tab) else: windows.msg.setText("Le nbr des elements doit etre entre 5 et 30") def test_portebonheur(n) : ch=str(n) d1=int(ch[1])-int(ch[0]) d2=int(ch[1])-int(ch[0]) i=1; while (d1==d2) and (i<len(ch)-2): d2=int(ch[i+1])-int(ch[i]) i=i+1 if (d1==d2) : return True else: return False def afficher_entiers_portebonheurs(): liste='' for i in range (n) : if test_portebonheur(t[i]): liste=liste+str(t[i])+'\n' windows.resultat.setText(liste) windows.remplir_bt.clicked.connect ( createTab ) windows.bt_recherche.clicked.connect ( afficher_entiers_portebonheurs ) windows.show() app.exec_() |
Exécution du programme
Vous pouvez voir aussi :
La robotique éducative joue un rôle important dans l'éducation des enfants et des jeunes en les aidant à acquérir des compétences en science et technologie.
Dans ce cadre notre site web représente une excellente ressource pour les parents, les enseignants et les enfants qui souhaitent découvrir la robotique.
Zaouiet Kontech-Jemmel-Monastir-Tunisie
+216 92 886 231
medaliprof@gmail.com
Site robotique réalisé par Mohamed Ali-Prof Info