Un nombre Hazard est un entier qui est divisible par la somme de ses chiffres.
Exemple : 198 est un nombre Hazard.
En effet 198 est divisible par la somme de ses chiffres qui est 18 (1+9+8=18).
Travail demandé :
Ecrire un programme Pascal qui permet de chercher et d’afficher tous les nombres hazard de l’intervalle [n,m] (avec 100 ≤ n < m) et dont le prédécesseur de chacun est premier. N.B : On rappelle qu’un nombre est dit premier s’il est divisible uniquement par 1 et par lui-même. Par définition, 1 n’est pas considéré comme étant un nombre premier. Exemple : Pour n=100 et m=150, le programme affiche les nombres Hasards suivants :
102 car 102 est Hazard et son prédécesseur 101 est un nombre premier
108 car 108 est Hazard et son prédécesseur 107 est un nombre premier
110 car 110 est Hazard et son prédécesseur 109 est un nombre premier
114 car 114 est Hazard et son prédécesseur 113 est un nombre premier
132 car 132 est Hazard et son prédécesseur 131 est un nombre premier
140 car 140 est Hazard et son prédécesseur 139 est un nombre premier
150 car 150 est Hazard et son prédécesseur 149 est un nombre premier
Pour résoudre ce problème, l'algorithme doit accomplir plusieurs tâches : vérifier si un nombre est un "nombre Hazard", vérifier si son prédécesseur est un nombre premier, et parcourir tous les nombres dans l'intervalle [n, m]. Voici le principe de l'algorithme détaillé.
1. Initialisation : Lire les valeurs de n
et m
(avec 100 ≤ n < m).
2. Boucle sur l'intervalle [n, m] :
Pour chaque entier i
dans l'intervalle [n, m] :
3. Vérifier si i
est un nombre Hazard :
Calculer la somme des chiffres de i
.
Vérifier si i
est divisible par cette somme.
4. Vérifier si le prédécesseur i-1
est un nombre premier :
Si i-1
est premier, on affiche i
Dans cet algorithme, On va utiliser deux fonctions et deux procédures :
Algorithme du programme principal
1 2 3 4 5 |
Algorithme affichage_entiers_hazards Debut saisie() #saisie des entier n et m afficher_hazard(n,m) Fin |
Déclaration des objets
Objet | Type / Nature |
n | entier |
m | entier |
La procédure saisie
Cette procédure lit les valeurs de n
et m
(avec 100 ≤ n < m).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
fonction saisie():entier Début Ecrire('donner un entier n >=100: ') Lire(n) Tant que n<100 faire Ecrire('donner un entier n >=100: ') Lire(n) Fin tant que Ecrire('donner un entier m >',n,' :') lire(m) Tant que m<=n faire Ecrire('donner un entier m >',n,' :') Fin tant que Fin |
Déclaration des objets
Objet | Type / Nature |
n | entier |
m | entier |
La fonction test_premier
Cette fonction teste si un entier n'a aucun diviseur autre que 1 et lui-même en parcourant tous les nombres de 2 à n div 2.
1 2 3 4 5 6 7 8 |
fonction test_premier(n:entier):booleen Début i<-2 Tant que (n mod i !=0) and (i<= n div 2) faire i<-i+1 Fin tant que retourner (i> n div 2) Fin |
Déclaration des objets
Objet | Type / Nature |
i | entier |
La fonction test_hazard
Cette fonction calcule la somme des chiffres de i
, et vérifier si i
est divisible par cette somme.
1 2 3 4 5 6 7 8 9 10 |
fonction test_hazard(n:entier):booleen Début ch<-Valeur(n) s<-0 Pour i de 0 à long(ch)-1 faire d<-Valeur(ch[i]) s<-s+d Fin pour retourner (n mod s=0) Fin |
Déclaration des objets
Objet | Type / Nature |
i | entier |
s | entier |
d | entier |
ch | chaine des caracteres |
La procédure afficher_hazard
Cette procédure affiche tous les nombres hazard de l’intervalle [n,m] (avec 100 ≤ n < m) et dont le prédécesseur de chacun est premier.
1 2 3 4 5 6 7 8 |
Procedure afficher_hazard(n:entier,m:entier) Début Pour i de n à m faire Si test_hazard(i) et test_premier(i-1) : Ecrire(i+' car '+i+' est Hazard et son prédécesseur '+i-1+' est un nombre premier') 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 |
def saisie() : global m,n n=int(input('donner un entier n >=100: ')) while n<100 : n=int(input('donner un entier n >=100: ')) m=int(input('donner un entier m >'+str(n)+' :')) while m<=n : m=int(input('donner un entier m >'+str(n)+' :')) def test_premier(n): i=2 while (n % i !=0) and (i<= n // 2): i=i+1 return (i> n // 2) def test_hazard(n): ch=str(n) s=0 for i in range(len(ch)): d=int(ch[i]) s=s+d return (n % s==0) def afficher_hazard(n,m): for i in range(n,m+1): if test_hazard(i) and test_premier(i-1) : print(str(i)+' car '+str(i)+' est Hazard et son prédécesseur '+str(i-1)+' est un nombre premier') #programme principal saisie() #saisie des entier n et m afficher_hazard(n,m) |
Exécution du programme
Pour créer une application en Python pour rechercher et afficher tous les nombres hazard de l’intervalle [n,m] (avec 100 ≤ n < m) et dont le prédécesseur de chacun est premier. en utilisant Qt Designer pour l'interface graphique, suivez 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 n >=100.
QLineEdit
nommé 'm' pour entrer un entier m >n.
QPushButton
nommé 'hazard_bt' pour exécuter le module afficher_hazard.
QLabel
nommé 'msg' pour afficher un message d'erreur.
QPushButton
nommé 'hazard_bt' pour exécuter le module afficher_hazard.
QLabel
nommé 'resultat' pour afficher tous les nombres hazard de l’intervalle [n,m].
Enregistrez le fichier avec l'extension .ui
, par exemple entier-hazard-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 |
from PyQt5.uic import loadUi from PyQt5 import QtCore, QtGui from PyQt5.QtWidgets import * from PyQt5 import QtCore, QtGui, QtWidgets app = QApplication([]) windows = loadUi ("entier-hazard-interface.ui") def test_premier(n): i=2 while (n % i !=0) and (i< n // 2): i=i+1 return (n % i!=0) def test_hazard(n): ch=str(n) s=0 for i in range(len(ch)): d=int(ch[i]) s=s+d return (n % s==0) def afficher_hazard(): n = int(windows.n.text()) m = int(windows.m.text()) windows.msg.clear() if m>n>=100 : liste='' for i in range(n,m+1): if test_hazard(i) and test_premier(i-1) : liste=liste+str(i)+' car '+str(i)+' est Hazard et son prédécesseur '+str(i-1)+' est un nombre premier\n' windows.resultat.setText(liste) else: windows.msg.setText('Veuillez saisir n et m tq m>n>=100') windows.hazard_bt.clicked.connect(afficher_hazard) 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