On se propose d'écrire un algorithme et un programme Python permettant de saisir deux nombres positifs M et N puis de vérifier s’ils forment une succession parfaite ou non.
Une succession parfaite de deux nombres positifs M et N est une chaîne de caractères ch formée par une succession de chiffres consécutifs distincts où le pas de la succession est égal à 1. Cette chaîne est obtenue en concaténant les chiffres de M et N puis en les triant dans l’ordre croissant.
Exemples :
Pour M=2748 et N=365, ch = "2345678". Les chiffres de ch forment une succession parfaite.
En effet, le pas de la succession est égal à 1 entre tous les chiffres de ch.
Pour M=8473 et N=546, ch = "3445678". Les chiffres de ch ne forment pas une succession parfaite. En effet, le pas de la succession est différent de 1 entre le deuxième et le troisième chiffre.
Pour M=2748 et N=956, ch = "2456789". Les chiffres de ch ne forment pas une succession parfaite. En effet, le pas de la succession est différent de 1 entre le premier et le deuxième chiffre.
Dans cet algorithme, On va utiliser trois fonctions :
Algorithme du programme Principal
1 2 3 4 5 6 7 8 9 10 |
Algorithme succession_parfaite Debut m<-saisie_entier('m') n<-saisie_entier('n') Si (verif_succession(m,n)) alors Ecrire(m+' et '+n+' forment une succession parfaite') Sinon Ecrire(m+' et '+n+' ne forment pas une succession parfaite') Fin si Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
n | entier |
m | entier |
La fonction saisie_entier
Cette fonction saisit un entier > 0.
1 2 3 4 5 6 7 8 9 10 |
fonction saisie_entier(nom_variable:chaine):entier Début Ecrire("donner "+nom_variable+" > 0: ") Lire(n) Tant que (n<1) faire Ecrire("donner "+nom_variable+" > 0: ") Lire(n) Fin tant que retourner n Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
n | entier |
La fonction tri_chaine
Cette fonction trie et retourne les caractères de la chaîne dans un ordre croissant.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
fonction tri_chaine(ch:chaine):chaine Début # tri par selection Pour i de 0 à long(ch)-2 faire min<-i Pour j de i à long(ch)-1 faire Si Valeur(ch[min])>Valeur(ch[j]) alors min<-j Fin si Fin pour Si min != i alors # permuter les chiffres dans la chaine ch ch<-Sous_chaine(ch,0,i)+ch[min]+Sous_chaine(ch,i+1,min)+ch[i]+Sous_chaine(ch,min+1,long(ch)) Fin si Fin pour retourner ch Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
j | entier |
La fonction verif_succession
Cette fonction vérifie que la concaténation de deux nombres n et m est une succession parfaite.
1 2 3 4 5 6 7 8 9 10 11 |
fonction verif_succession(ch:chaine):booleen Début # tri la chaine forme de n et m dans un ordre croissant ch=tri_chaine(str(m)+str(n)) i=0 # verifier que la succession de chiffres consécutifs ou le pas = 1 Tant que (i<long(ch)-2) et Valeur(ch[i+1])-Valeur(ch[i])==1 : i<-i+1 Fin tant que retourner Valeur(ch[i+1])-Valeur(ch[i])==1 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 |
def saisie_entier(nom_variable): n=int(input("donner "+nom_variable+" > 0: ")) while (n<=0) : n=int(input("donner "+nom_variable+" > 0: ")) return n def tri_chaine(ch): # tri par selection for i in range (0,len(ch)-1): min=i for j in range(i,len(ch)): if int(ch[min])>int(ch[j]) : min=j if min != i : # permuter les chiffres dans la chaine ch ch=ch[0:i]+ch[min]+ch[i+1:min]+ch[i]+ch[min+1:len(ch)] return ch def verif_succession(m,n): # tri la chaine forme de n et m dans un ordre croissant ch=tri_chaine(str(m)+str(n)) i=0 # verifier que la succession de chiffres consécutifs ou le pas = 1 while (i<len(ch)-2) and int(ch[i+1])-int(ch[i])==1 : i=i+1 return int(ch[i+1])-int(ch[i])==1 #programme principal m=saisie_entier('m') n=saisie_entier('n') if (verif_succession(m,n)): print(str(m)+' et '+str(n)+' forment une succession parfaite') else: print(str(m)+' et '+str(n)+' ne forment pas une succession parfaite') |
Exécution du programme:
Pour créer une application en Python et Designer QT qui saisit deux nombres positifs M et N et vérifie s’ils forment une succession parfaite ou non, on va suivre ces étapes:
a- Ouvrez Qt Designer et créez un nouveau fichier de type Main Window.
b- Ajoutez ces widgets:
QLineEdit
nommé 'n' pour entrer un entier >0.
QLineEdit
nommé 'm' pour entrer un entier >0.
QPushButton
nommé 'verifier_bt' pour vérifier que M et N forment une succession parfaite.
QLabel
nommé 'msg' pour afficher des messages d'erreur et le résultat de la vérification.
Enregistrez le fichier avec l'extension .ui
, par exemple succession_parfaite-interface.ui
.
Voici un exemple de script Python qui utilise l'interface graphique générée par Qt Designer.
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 |
from PyQt5.uic import loadUi from PyQt5.QtWidgets import QApplication app = QApplication([]) windows = loadUi ("succession_parfaite-interface.ui") def tri_chaine(ch): ch1='' # tri par selection for i in range (0,len(ch)-1): min=i for j in range(i,len(ch)): if int(ch[min])>int(ch[j]) : min=j if min != i : # permuter les chiffres dans la chaine ch ch=ch[0:i]+ch[min]+ch[i+1:min]+ch[i]+ch[min+1:len(ch)] return ch def play(): windows.msg.clear() m = int(windows.m.text()) n = int(windows.n.text()) if m>0 and n >0 : # tri la chaine forme de n et m dans un ordre croissant ch=tri_chaine(str(m)+str(n)) i=0 # verifier que la succession de chiffres consécutifs ou le pas = 1 while (i<len(ch)-2) and int(ch[i+1])-int(ch[i])==1 : i=i+1 if int(ch[i+1])-int(ch[i])==1 : windows.msg.setText(str(m)+' et '+str(n)+' forment une succession parfaite') else: windows.msg.setText(str(m)+' et '+str(n)+' ne forment pas une succession parfaite') else: windows.msg.setText(" Veuillez introduire m>0 et n >0 ") windows.verifier_bt.clicked.connect(play) 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