 
                        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