On se propose d’écrire un programme Python permettant :
a) de saisir un tableau de n chaînes non vides composées chacun d’un maximum de 10 caractères avec 5≤n≤15.
b) de garder la première occurrence pour les éléments redondants(qui apparaissent plus qu’une fois) et de remplacer toutes les autres occurrences par des chaînes vides. c) d’afficher les chaînes non vides restantes du tableau T.
Exemple : T à l’état initial
Ali | Ali | Salem | Amel | Eya | Mohamed | Amel | Salem | Salem | Aziz |
T à l’état final
Ali | Salem | Amel | Eya | Mohamed | Aziz |
Voici une approche algorithmique pour résoudre le problème, étape par étape :
a) Saisir un tableau de n
chaînes :
Nous allons d'abord saisir un tableau de n
chaînes, où chaque chaîne est non vide et a un maximum de 10 caractères, et où 5 ≤ n ≤ 15
.
b) Garder la première occurrence pour les éléments redondants :
Pour chaque élément qui apparaît plus d'une fois, nous allons garder la première occurrence dans le tableau, et remplacer toutes les autres occurrences par des chaînes vides.
c) Afficher les chaînes non vides restantes :
Nous afficherons uniquement les chaînes non vides du tableau final.
Dans cet algorithme, On va utiliser deux fonctions et deux procédures:
Algorithme du programme Principal
1 2 3 4 5 6 7 8 9 |
Algorithme suppression_redondances Debut n<-saisie_taille() Ecrire('Remplissage du tableau t') remplir(t,n) effacer_redondance(t,n) Ecrire('tableau t apres elimination des occurrences') afficher(t,n+1) Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
n | entier |
t | tableaux des chaînes |
La fonction saisie_taille
Cette fonction saisit un entier entre 5 et 15.
1 2 3 4 5 6 7 8 9 10 |
fonction saisie_taille():entier Début Ecrire('donner un entier entre 5 et 15') Lire(n) Tant que (n<5) ou (n>15) faire Ecrire('donner un entier entre 5 et 15') 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 par des chaines dont leurs longueurs entre 1 et 10.
1 2 3 4 5 6 7 8 9 10 11 |
procedure remplir(@t:tab;n:entier) Début Pour i de 0 à n-1 faire Ecrire("donner elt N°"+i+" dont 1<= sa longueur<=10: ") lire(t[i]) Tant que (long(t[i])==0) ou (long([i])>10 faire Ecrire("donner elt N°"+i+" dont 1<= sa longueur<=10: ") lire(t[i]) Fin tant que Fin pour Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
La procédure inserer_lettre
Cette procédure insère un caractère dans la première position possible dans le tableau T en respectant que deux éléments successifs du tableau ne sont pas égaux.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
procedure inerer_lettre(@t:tab;n:entier) Début i<-1 #recherche la bonne position pour inserer le caractere c Tant que (c=t[i-1]) ou (c==t[i]) faire i<-i+1 Fin tant que #faire decaler les element du tableau à droite à partir de la position i Pour j de n à i-1 [pas=-1] faire t[j]=t[j-1] Fin fpour #inserer le carcatere c dans le tableau t[i]<-c Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
j | entier |
La procédure effacer_redondance
Cette procédure garde la première occurrence pour les éléments redondants(qui apparaissent plus qu’une fois) et remplace toutes les autres occurrences par des chaînes vides.
1 2 3 4 5 6 7 8 9 10 11 |
procedure effacer(t:tab;n:entier) Début Pour i de 0 à n-2 faire Si (t[i]!='') alors Pour j de i+1 à n-1 faire # recherche des elements redondants Si (t[i]==t[j]) alors t[j]<-'' #remplacer toutes la 2eme occurrences par une cahine vide Fin si Fin pour Fin pour Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
j | entier |
La procédure afficher
Cette procédure affiche les éléments du tableau
1 2 3 4 5 6 |
procedure afficher(t:tab;n:entier) Début Pour i de 0 à n-1 faire Ecrire('t['+i+']= '+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 |
from numpy import array t=array([str]*20) #declaration du tableau des caracteres def saisie_taille() : n=int(input("donner un entier entre 5 et 15: ")) while(n<5) or (n>15) : n=int(input("donner un entier entre 5 et 15: ")) return n def remplir(t,n): for i in range (n) : t[i]=input("donner elt N°"+str(i)+" dont 1<= sa longueur<=10: ") while (len([i])==0) or (len([i])>10): t[i]=input("donner elt N°"+str(i)+" dont 1<= sa longueur<=10: ") def effacer_redondance(t,n): for i in range(n-1): if (t[i]!=''): for j in range(i+1,n): if (t[i]==t[j]): t[j]='' def afficher(t,n): for i in range (n) : print('t['+str(i)+']= '+t[i]) #programme principal n=saisie_taille() print('Remplissage du tableau t') remplir(t,n) effacer_redondance(t,n) print('tableau t apres elimination des occurrences') afficher(t,n) |
Exécution du programme
Pour créer une application en Python et Designer QT qui garde la première occurrence pour les éléments redondants(qui apparaissent plus qu’une fois) et remplace toutes les autres occurrences par des chaînes vides, 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é 'ch' pour entrer les chaine.
QPushButton
nommé 'remplir_bt pour mettre les chaines dans le tableau t
QLabel
nommé 'msg' pour afficher des messages d'erreur
QPushButton
nommé 'bt_eliminer' pour insérer le caractère c dans le tableau t.
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 |
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([str]*30) # declaration d'un tableau des caractères 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 createTab(): # Procedure qui remplit un tableau a partir d'une chaine des caractère 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='' test_long=True # parcourir les caracteres de la chaine while i<len(ch) and test_long: if (ch[i]!=' '): ch1=ch1+ch[i] if ((ch[i]==' ') or (i==len(ch)-1)) : t[j]=ch1 ch1='' test_long=1<=len(t[j])<=10 # test du longueur du mot j=j+1 i=i+1 if test_long==True : if 5<=j<=15: # test du taille du tableau n=j tab='' for k in range (j) : tab=tab+ 't['+str(k)+']= '+ t[k]+ '\n' #afficher les elements du tableau windows.tab_label.setText(tab) else: windows.msg.setText("Le nbr des elements doit etre entre 5 et 15") else: windows.msg.setText("La longueur des mots doit etre entre 1 et 5") def effacer_redondance(): for i in range(n-1): if (t[i]!=''): for j in range(i+1,n): if (t[i]==t[j]): t[j]='' tab='' for k in range (n) : tab=tab+ 't['+str(k)+']= '+ t[k]+ '\n' #afficher les elements du tableau windows.tab_label.setText(tab) windows.remplir_bt.clicked.connect ( createTab ) windows.bt_eliminer.clicked.connect ( effacer_redondance ) windows.show() app.exec_() |
Exécution du programme
1) Remplissage du tableau
2) Après la suppression des éléments redondants
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