Un nombre est dit abondant s’il est strictement supérieur à la somme de tous ses diviseurs sauf lui-même.
Exemple : 10 est abondant. En effet les diviseurs de 10 sauf lui-même sont 1,2 et 5. Comme 1+2+5=8 at 10>8, alors est dit abondant.
Un nombre est dit déficient s’il est strictement inférieur à la somme de tous ses diviseurs sauf lui-même.
Exemple : 12 est déficient. En effet les diviseurs de 12 sauf lui-même sont 1,2,3,4 et 6. Comme 1+2+3+4+6=16 at 12<16, alors est dit déficient.
Travail demandé:
Ecrire un programme Python qui permet de remplir un tableau T par n entiers strictement positifs avec 5≤n≤25, puis de transférer, les nombres déficients dans un tableau TD et les nombres abondants dans un tableau TA et d’afficher les deux tableaux résultants (TD et TA).
Exemple : pour le tableau Nombre suivant :
10 | 12 | 118 | 6 | 45 | 118 | 100 |
On obtient les tableaux TD et TA suivant
TD
12 | 100 |
TA
10 | 118 | 45 | 118 |
Pour résoudre ce problème, voici le principe algorithmique qui permet de remplir un tableau T avec n entiers strictement positifs, puis de transférer les nombres déficients dans un tableau TD et les nombres abondants dans un tableau TA :
1- Initialisation :
Créer un tableau T
contenant n
entiers strictement positifs (avec 5 ≤ n ≤ 25
).
Initialiser deux tableaux vides TD
et TA
pour stocker respectivement les nombres déficients et abondants.
2- Calcul des diviseurs :
Pour chaque élément t[i]
dans le tableau T
, calculer la somme de ses diviseurs propres (c'est-à-dire, tous les diviseurs de t[i]
excepté t[i]
lui-même).
3- Classification :
Si t[i]
est inférieur à la somme de ses diviseurs propres, il est considéré comme un nombre déficient. Ajouter t[i]
au tableau TD
.
Si t[i]
est supérieur à la somme de ses diviseurs propres, il est considéré comme un nombre abondant. Ajouter t[i]
au tableau TA
.
Sinon, ignorer l'élément t[i]
(ce serait un nombre parfait, égal à la somme de ses diviseurs propres).
4- Affichage des résultats :
Afficher les tableaux TD
et TA
contenant respectivement les nombres déficients et abondants.
Dans cet algorithme, On va utiliser 3 fonctions et 3 procédures :
Algorithme du programme principal
1 2 3 4 5 6 7 8 9 10 11 |
Algorithme deficients_abondants Debut n<-saisie() Ecrire('remplissage du tableau t') remplir(t,n) transfert(t,n) Ecrire('tableau TD') afficher_tableau(td,j,'TD') Ecrire('tableau TA') afficher_tableau(ta,k,'TA') Fin |
Déclaration des objets
Objet | Type / Nature |
i | entier |
j | entier |
k | entier |
t | tableau de 30 entiers |
ta | tableau de 30 entiers |
td | tableau de 30 entiers |
La fonction saisie
Cette fonction retourne un entier n entre 4 et 10 saisi par l'utilisateur.
1 2 3 4 5 6 7 8 9 10 |
foncttion saisie():entier Début Ecrire('donner un entier entre 5 et 25') lire (n) Tant que n<5 ou n>25 faire Ecrire('donner un entier entre 5 et 25') 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 distincts.
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,">0:") lire(t[i]) Tant que t[i]<=0 faire Ecrire("donner elt N°",i,">0:") lire(t[i]) Fin tant que Fin pour Fin |
Déclaration des objets
Objet | Type / Nature |
i | entier |
La fonction somme_diviseurs
Cette fonction calcule la somme des diviseurs propres de l'entier n excepté lui-même.
1 2 3 4 5 6 7 8 9 10 |
Fonction somme_diviseurs(n:entier):entier Début s<-0 Pour i de 1 à n div 2 faire Si (n mod i=0) alors s<-s+i Fin si Fin pour retourner s Fin |
Déclaration des objets
Objet | Type / Nature |
i | entier |
s | entier |
La procédure transfert
Cette procédure transfert du tableau T, les nombres déficients dans un tableau TD et les nombres abondants dans un tableau TA.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Procédure transfert(t:Tab,n:entier) Début j<-0 k<-0 Pour i de 0 à n-1 alors Si (t[i]<somme_diviseurs(t[i])) alors td[j]<-t[i] j<-j+1 Sinon (t[i]>somme_diviseurs(t[i])) alors ta[k]<-t[i] k<-k+1 Fin si Fin pour Fin |
Déclaration des objets
Objet | Type / Nature |
i | entier |
j | entier |
k | entier |
La procédure afficher_tableau
Cette procédure affiche les éléments du tableau.
1 2 3 4 5 6 7 |
Procédure afficher_tableau(t:Tab,n:entier,nom,chaine) Début Pour i de 0 à n-1 faire Ecrire(nom,'[',i,']=') Ecrire(t[i]) 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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
from numpy import array t=array([int()]*30) td=array([int()]*30) ta=array([int()]*30) def saisie_taille() : n=int(input("donner un entier entre 5 et 25 ")) while(1>n) or (n>99) : n=int(input("donner un entier entre 5 et 25 ")) return n def test_distinct(t,i): j=i-1 while (t[j]!=t[i]) and (j>0): j=j-1 return t[j]!=t[i] def remplir(t,n): for i in range (n) : t[i]=int(input("donner elt N°"+str(i)+">0: ")) while t[i]<=0: t[i]=int(input("donner elt N°"+str(i)+">0: ")) def afficher_tableau(t,n,nom): for i in range (n) : print(nom+'['+str(i)+']= '+ str(t[i])) def somme_diviseurs(n): s=0 for i in range(1,n//2+1): if (n % i==0): s=s+i return s def transfert(t,n): global j,k j=0 k=0 for i in range(n): if (t[i]<somme_diviseurs(t[i])): td[j]=t[i] j=j+1 elif (t[i]>somme_diviseurs(t[i])): ta[k]=t[i] k=k+1 # programme principal n=saisie_taille() print('remplissage du tableau t') remplir(t,n) transfert(t,n) print('tableau TD') afficher_tableau(td,j,'TD') print('tableau TA') afficher_tableau(ta,k,'TA') |
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 de transférer, les nombres déficients dans un tableau TD et les nombres abondants dans un tableau TA et d’afficher les deux tableaux résultants (TD et TA).
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_transfert' pour exécuter le module transfert.
QLabel
nommé 'msg' pour afficher un message d'erreur si ch est vide ou contient des valeurs non numériques ou la taille du tableau n'appartient pas à l'intervalle [5,25].
QLabel
nommé 'tab_label' pour afficher les éléments du tableau T.
QLabel
nommé 'tabA_label' pour afficher les nombres abondants du tableau TA.
QLabel
nommé 'tabD_label' pour afficher les nombres déficients du tableau TD.
Enregistrez le fichier avec l'extension .ui
, par exemple tabtab-2.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 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 96 97 98 99 100 101 102 103 104 105 106 |
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()]*30) ta=array([int()]*30) td=array([int()]*30) 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 def test_positif(t,n): i=0 while (t[i]>0) and (i<n-1): i=i+1 return t[i]>0 # 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='' # parcourir les caracteres de la chaine while((i<len(ch)) and (('0'<=ch[i]<='9') or (ch[i]==' ')or (ch[i]=='-'))): if ('0'<=ch[i]<='9') or (ch[i]=='-'): ch1=ch1+ch[i] if ((ch[i]==' ') or (i==len(ch)-1)) : t[j]=int(ch1) ch1='' j=j+1 i=i+1 if (i<len(ch)) : # si la chaine contient des valeurs non numeriques windows.msg.setText("la chaîne contient des valeurs non numériques") else : if 5<=j<=25: if test_positif(t,j): 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("la chaîne contient des valeurs <=0") else: windows.msg.setText("la taille du tableau doit etre entre 5 et 25") def somme_diviseurs(n): s=0 for i in range(1,n//2+1): if (n % i==0): s=s+i return s def transfert(): global j,k j=0 k=0 for i in range(n): if (t[i]<somme_diviseurs(t[i])): td[j]=t[i] j=j+1 elif (t[i]>somme_diviseurs(t[i])): ta[k]=t[i] k=k+1 tab='' for i in range (j) : tab=tab+ 'td['+str(i)+']= '+ str(td[i])+ '\n' windows.tabD_label.setText(tab) tab='' for i in range (k) : tab=tab+ 'ta['+str(i)+']= '+ str(ta[i])+ '\n' windows.tabA_label.setText(tab) windows.remplir_bt.clicked.connect ( createTab ) windows.bt_transfert.clicked.connect (transfert ) 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