A l’occasion de son vingtième anniversaire et pour encourager ses clients, une société de télécommunication, dont les indicatifs sont 65 et 66, accorde un bonus de recharge pour les clients gagnants. Un client est dit gagnant si le montant de ses communications est supérieur ou égal à la consommation moyenne de N clients de la société.
Pour automatiser cette tâche, on se propose d’écrire un programme Python qui permet de :
1- remplir 2 tableaux T et C respectivement, par les numéros et les consommations téléphoniques des N clients, avec 10≤N≤100, sachant que :
2- chaque numéro est unique et est formé de huit chiffres commençant obligatoirement par 65 ou 66,
3- pour chaque numéro de téléphone T[i], on fait correspondre un montant de consommation C[i] exprimé en dinars tunisiens,
3- afficher les numéros de téléphone gagnants et les bonus de recharge, obtenus en multipliant par 20, la somme des six derniers chiffres de chaque numéro
Exemple :
Pour N=7 et les tableaux T et C suivants
T:
0 | 1 | 2 | 3 | 4 | 5 | 6 |
66456789 | 66127721 | 65980765 | 66123321 | 66285585 | 66285582 | 65347743 |
C:
0 | 1 | 2 | 3 | 4 | 5 | 6 |
200 | 20 | 300 | 250 | 45 | 99 | 180 |
Le programme affiche :
Le montant moyen des consommations est : 156.285
Le numéro 66456789 a gagné 780 DT
Le numéro 66127721 a gagné 400 DT
Le numéro 65980765 a gagné 700 DT
Le numéro 66123321 a gagné 240 DT
Le numéro 66285585 a gagné 660 DT
Le numéro 66285582 a gagné 600 DT
Le numéro 65347743 a gagné 560 DT
Dans cet algorithme, On va utiliser trois fonctions et deux procédures:
Algorithme du programme Principal
1 2 3 4 5 6 |
Algorithme adherents_commentaires Debut n<-saisie_taille() remplir(t,c,n) afficher_gagnants(t,c,n) Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
t | tableaux des chaînes |
c | tableaux des entiers |
n | entier |
La fonction saisie_taille
Cette fonction saisit la taille des deux tableaux t et c des entre 7 et 100.
1 2 3 4 5 6 7 8 9 10 |
fonction saisie_taille_nom():entier Début Ecrire('donner la taille du tableau entre 7 et 100: ') Lire(n) Tant que n<7 ou n>100 faire Ecrire('donner la taille du tableau entre 7 et 100: ') Lire(n) Fin tant que retourner n Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
n | entier |
La fonction verif
Cette fonction vérifie si le numéro de téléphone est unique ou non dans le tableau t.
1 2 3 4 5 6 7 8 |
fonction verif_unicite(t:tab,i:entier):booleen Début j<-0 Tant que t[j]!=t[i] et j<i-1 faire j<-j+1 Fin tant que retourner t[j]!=t[i] Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
j | entier |
La procédure remplir
Cette procédure remplit:
- le tableau t par des numéros de téléphones distinctes formés de huit chiffres commençant obligatoirement par 65ou 66
- le tableau c par les montants de consommation.
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 |
procedure remplir_nom(@t:tab1,@c:tab2;n:entier) Début Ecrire("donner telephone N°0: ") Lire(t[0]) Tant que (t[0]<65000000) ou (t[0]>66999999) faire Ecrire("donner telephone N°0: ") Lire(t[0]) Fin tant que Ecrire("donner le montant de consommation N°0: ") Lire(c[0]) Tant que (c[0]<0) faire Ecrire("donner le montant de consommation N°0: ") Lire(c[0]) Fin tant que Pour i de 1 à n-1 faire Ecrire("donner telephone N°"+i+": ") Lire(t[i]) Tant que (t[i]<65000000) ou (t[i]>66999999) ou (verif(t,i)=Faux) faire Ecrire("donner telephone N°"+i+": ") Lire(t[i]) Fin tant que Ecrire("donner le montant de consommation N°"+i+": ") Lire(c[i]) Tant que (c[i]<0) faire Ecrire(donner le montant de consommation N°"+i+": ") Lire(c[i]) Fin tant que Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
La fonction somme_6chiffres
Cette fonction calcule et retourne la somme des six derniers chiffres du numéro de téléphone.
1 2 3 4 5 6 7 8 9 |
fonction somme_6chiffres(tel:entier):entier Début ch<-Convch(tel) s<-0 Pour i de 2 à long(ch)-1 faire s<-s+Valeur(ch[i]) Fin pour retourner s Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
s | entier |
ch | chaîne des caractères |
La procédure afficher_gagnants
Cette procédure affiche le montant total consommé, les numéros de téléphone et les bonus de recherge.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
procedure afficher_gagnants(t:tab1,c:tab2,n:entier) Début montant_moyen<-0 Pour i de 0 à n-1 faire montant_moyen<-montant_moyen+c[i] Fin pour Si montant_moyen>0 alors Ecrire("Le montant moyen des consommations est: "+(montant_moyen/n)) Pour i de 0 à n-1 faire Si c[i]>0 alors ecrire('Le numero '+t[i]+ ' a gagne '+somme_6chiffres(t[i])*20)) Sinon Fin pour Sinon Ecrire("Il n'y pas de gagnant") Finsi Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
montant_moyen | 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 |
from numpy import array t=array([int()]*110) # declaration du tableau pour les numeros telephones c=array([int()]*110) # declaration du tableau pour les montants consommes def saisie_taille(): n=int(input("donner la taille du tableau entre 7 et 100: ")) while (n<1) or (n>100): n=int(input("donner la taille du tableau entre 7 et 100: ")) return n def verif(t,i): j=0 while t[j]!=t[i] and j<i-1: j=j+1 return t[j]!=t[i] def remplir(t,c,n): # remplir les deux tableaux t et c t[0]=input("donner telephone N°0: ") while (t[0]<65000000) or (t[0]>66999999): t[0]=input("donner telephone N°0: ") c[0]=input("donner le montant de consommation N°0: ") while (c[0]<0) : c[i]=input("donner le montant de consommation N°0: ") for i in range (1,n) : t[i]=input("donner telephone N°"+str(i)+": ") while (t[i]<65000000) or (t[i]>66999999) or (verif(t,i)==False): t[i]=input("donner telephone N°"+str(i)+": ") c[i]=input("donner le montant de consommation N°"+str(i)+": ") while (c[i]<0) : c[i]=input("donner le montant de consommation N°"+str(i)+": ") def somme_6chiffres(tel): ch=str(tel) s=0 for i in range(2,len(ch)): s=s+int(ch[i]) return s def afficher_gagnants(t,c,n): montant_moyen=0 for i in range (n) : montant_moyen=montant_moyen+c[i] if montant_moyen>0 : print("Le montant moyen des consommations est: "+str("{:.3f}".format(montant_moyen/n))) for i in range (n) : if c[i]>0 : print('Le numero '+str(t[i])+ ' a gagne '+str(somme_6chiffres(t[i])*20)) else: print("Il n'y pas de gagnant") #programme principal n=saisie_taille() remplir(t,c,n) afficher_gagnants(t,c,n) |
Exécution du programme
1) En cas de l'existance des clients gagnants:
2) Dans le cas ou il n'y a pas de gagnant:
Pour créer une application en Python et Designer QT qui accorde un bonus de recharge pour les clients gagnants, 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é 'ch1' pour entrer les numéros des téléphones.
QLineEdit
nommé 'ch2' pour entrer le montant consommé pour chaque numéro.
QPushButton
nommé 'remplirt_bt' pour mettre les numéros des téléphones dans le tableau T.
QPushButton
nommé 'remplirc_bt' pour mettre les montants consommés dans le tableau C.
QPushButton
nommé 'afficher_bt' pour rechercher le montant total consommé, la liste des numéros de téléphones gagnés et leurs bonus.
QLabel
nommé 'msg' pour afficher des messages d'erreur.
QLabel
nommé 'tabt_label' pour afficher les numéros de téléphones du tableau T.
QLabel
nommé 'tabc_label' pour afficher les montants consommés du tableau C.
QLabel
nommé 'resultat' pour afficher le montant total consommé, la liste des numéros de téléphones gagnés et leurs bonus.
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 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 |
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) # declaration du tableau des numeros des telephones c=array([int()]*30) # declaration du tableau des montants consommes 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 verif_unicite(t,i): j=0 while t[j]!=t[i] and j<i-1: j=j+1 return t[j]!=t[i] # Procedure qui remplit un tableau des adherents a partir d'une chaine des caractères def createTabT(): windows.tabt_label.clear() windows.msg.clear() global n #pour la taile du tableau a des utilisateurs ch = windows.ch1.text() verif_telephone=True verif=True if ch=="": windows.msg.setText("Veuillez remplir la chaîne") else: windows.msg.clear() # effacer le message d erreur ch= supprimer_espaces(ch) i=-1 j=0 ch1='' # parcourir les caracteres de la chaine CH1 while(i<len(ch)-1) and (verif) and (('0'<=ch[i]<='9')or(ch[i]==' ')) and (verif_telephone): i=i+1 if ('0'<=ch[i]<='9'): ch1=ch1+ch[i] if ((ch[i]==' ') or (i==len(ch)-1)) : # remplir le tableau t par les numeros des telephones t[j]=int(ch1) print(ch1[0]+ch1[1]) if (t[j]<65000000) or (t[j]>66999999) : verif_telephone=False if j>0: verif=verif_unicite(t,j) ch1='' j=j+1 if (i==len(ch)-1) and (verif) and (verif_telephone) and (('0'<=ch[i]<='9')or(ch[i]==' ')): if 4<=j<=30: n=j tab='' for k in range (j) : tab=tab+ 't['+str(k)+']= '+str(t[k])+ '\n' #afficher les elements du tableau windows.tabt_label.setText(tab) else: windows.msg.setText("la taille du tableau a doit etre entre 4 et 100") else: windows.msg.setText("les numeros doit etre forme par 8 chiffres et commencer par 65 ou 66 et unique ") # Procedure qui remplit un tableau des commenatires a partir d'une chaine des caractères def createTabC(): windows.tabtc_label.clear() windows.msg.clear() ch = windows.ch2.text() if ch=="": windows.msg.setText("Veuillez remplir la chaîne") else: windows.msg.clear() # effacer le message d erreur ch= supprimer_espaces(ch) i=-1 j=0 ch1='' # parcourir les caracteres de la chaine CH2 while(i<len(ch)-1) and (('0'<=ch[i]<='9')or(ch[i]==' ')): i=i+1 if ('0'<=ch[i]<='9'): ch1=ch1+ch[i] if ((ch[i]==' ') or (i==len(ch)-1)) : # remplir le tableau c par des montants consomme c[j]=int(ch1) ch1='' j=j+1 if (i==len(ch)-1) and (('0'<=ch[i]<='9')or(ch[i]==' ')): if j==n: #la taille du tableau c doit etre egal a la taille du tableau t tab='' for k in range (j) : tab=tab+ 'c['+str(k)+']= '+str(c[k])+ '\n' #afficher les elements du tableau windows.tabtc_label.setText(tab) else: windows.msg.setText("la taille du tableau a doit etre egal a "+str(n)) else: windows.msg.setText("les montants doit etre des entiers>=0 ") def somme_6chiffres(tel): ch=str(tel) s=0 for i in range(2,len(ch)): s=s+int(ch[i]) return s def afficher_gagnants(): montant_moyen=0 liste='' for i in range (n) : montant_moyen=montant_moyen+c[i] if montant_moyen>0 : liste=liste+"Le montant moyen des consommations est: "+str("{:.3f}".format(montant_moyen/n))+"\n" for i in range (n) : if c[i]>0 : liste=liste+'Le numero '+str(t[i])+ ' a gagne '+str(somme_6chiffres(t[i])*20)+'\n' else: liste="Il n'y pas de gagnant" windows.resultat.setText(liste) windows.remplirt_bt.clicked.connect ( createTabT ) windows.remplirc_bt.clicked.connect ( createTabC ) windows.afficher_bt.clicked.connect ( afficher_gagnants ) windows.show() app.exec_() |
Exécution du programme
1) Remplissage du tableau T
2) Remplissage du tableau C
3) Afficher le montant total consommé, la liste des numéros de téléphones gagnés et leurs bonus.
4) Dans le cas ou il n'y a pas de gagnant:
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