Soit le tableau T suivant :
10 | 7 | 9 | 7 | 10 | 6 | 7 | 4 | 8 | 8 |
Pour chaque élément on élimine ses occurrences et on les remplace par 0
10 | 7 | 9 | 0 | 0 | 6 | 0 | 4 | 8 | 0 |
On regroupe les éléments restant au début du tableau T
10 | 7 | 9 | 6 | 4 | 8 | 0 | 0 | 0 | 0 |
Ecrire un programme en Python qui fait le traitement ci-dessus par un tableau T de n (1<=n<=30)
Pour résoudre ce problème, nous devons suivre un algorithme qui traite un tableau T en supprimant les occurrences de chaque élément, en les remplaçant par 0, puis en regroupant les éléments restants au début du tableau.
Voici les étapes détaillées du principe de cet algorithme :
1- Saisie du tableau T : Saisir ou initialiser un tableau T
avec des éléments.
2- Parcourir chaque élément du tableau T :
Pour chaque élément, vérifier s'il a déjà été remplacé par 0.
Si ce n'est pas le cas, remplacer toutes ses occurrences par 0.
3- Regrouper les éléments restants au début du tableau :
Parcourir le tableau et déplacer les éléments non nuls au début du tableau.
Remplir le reste du tableau avec des 0.
4- Affichage du tableau final : Afficher le tableau T
après traitement.
Dans cet algorithme, On va utiliser une fonction et 4 procédures :
Algorithme du programme principal
1 2 3 4 5 6 7 8 9 10 11 12 |
Algorithme eliminer_tableau Debut n<-saisie() Ecrire('remplissage du tableau t') remplir(t,n) eliminer_occurrence(t,n) Ecrire('tableau t apres elimination des occurrences') afficher_tableau(t,n) organiser(t,n) Ecrire('tableau t apres le groupement des elements restants') afficher_tableau(t,n) Fin |
Déclaration des objets
Objet | Type / Nature |
n | entier |
t | tableau de 30 entiers |
La fonction saisie
Cette fonction retourne un entier n entre 1 et 30 saisi par l'utilisateur.
1 2 3 4 5 6 7 8 9 10 |
foncttion saisie() Début Ecrire('donner un entier entre 1 et 30') lire (n) Tant que n<1 ou n>30 faire Ecrire('donner un entier entre 1 et 30') lire (n) Fin tant que retourner n Fin |
La procédure remplir
Cette procédure remplit le tableau t de n entiers.
1 2 3 4 5 6 7 |
Procédure remplir(@t:Tab,n:entier) Début Pour i de 0 à n-1 faire Ecrire('donner elt N°',i,':') lire(t[i]) Fin pour Fin |
Déclaration des objets
Objet | Type / Nature |
i | 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) Début Pour i de 0 à n-1 faire Ecrire('t[',i,']=') Ecrire(t[i]) Fin pour Fin |
Déclaration des objets
Objet | Type / Nature |
i | entier |
La procédure eliminer_occurrence
Cette procédure vérifie pour chaque élément, s'il a déjà été remplacé par 0. Si ce n'est pas le cas, remplacer toutes ses occurrences par 0.
1 2 3 4 5 6 7 8 9 10 11 |
Procédure eliminer_occurrence(t:Tab,n:entier) Début Pour i de 0 à n-1 faire Si (t[i]!=0) alors Pour j de i+1 à n-1: Si t[i]=t[j] alors t[j]<-0 Fin si Fin pour Fin pour Fin |
Déclaration des objets
Objet | Type / Nature |
i | entier |
j | entier |
La procédure organiser
Cette procédure parcourt le tableau , déplacer les éléments non nuls au début du tableau et remplit le reste du tableau avec des 0.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Procédure organiser(t:Tab,n:entier) Début Pour i de 0 à n-2 faire Si t[i]=0 alors j<-i Tant que (t[j]=0) et (j<n-1) faire j<-j+1 Fin tant que Si t[j]!=0 alors x<-t[i] t[i]<-t[j] t[j]<-x Fin si Fin pour Fin |
Déclaration des objets
Objet | Type / Nature |
i | entier |
j | entier |
x | 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 |
from numpy import array t=array([int()]*30) def saisie_taille() : n=int(input("donner un entier entre 1 et 30 ")) while(1>n) and(n>30) : n=int(input("donner un entier entre 1 et 30 ")) return n def remplir(t,n): for i in range (n) : t[i]=int(input("donner elt N°"+str(i)+":")) def afficher_tableau(t,n): for i in range (n) : print('t['+str(i)+']= '+ str(t[i])) def eliminer_occurrence(t,n): for i in range (n-1): if (t[i]!=0) : for j in range(i+1,n): if (t[i]==t[j]): t[j]=0 def organiser(t,n): for i in range(n-1): if t[i]==0 : j=i while (t[j]==0) and (j<n-1) : j=j+1 if t[j]!=0 : x=t[i] t[i]=t[j] t[j]=x n=saisie_taille() print('remplissage du tableau t') remplir(t,n) eliminer_occurrence(t,n) print('tableau t apres elimination des occurrences') afficher_tableau(t,n) organiser(t,n) print('tableau t apres le groupement des elements restants') afficher_tableau(t,n) |
Exécution du programme
Tableau T après élimination des occurrences
Tableau T après le groupement des éléments
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 supprimer les occurrences de chaque élément, en les remplaçant par 0, puis en regroupant les éléments restants au début du tableau.
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é 'eliminer_bt' pour exécuter le module eliminer_occurrence afin de remplir le tableau à partir de la chaine 'ch'.
QPushButton
nommé 'organiser_bt' pour exécuter le module organiser afin de remplir le tableau à partir de la chaine 'ch'.
QLabel
nommé 'msg' pour afficher un message d'erreur si ch est vide ou contient des valeurs non numériques .
QLabel
nommé 'tablabel' pour afficher les éléments du tableau.
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 |
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) 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 afficher(t,n): tab='' for k in range (n) : tab=tab+ 't['+str(k)+']= '+ str(t[k])+ '\n' #afficher les elements du tableau windows.tab_label.setText(tab) # 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 du 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]==' '))): if ('0'<=ch[i]<='9') : 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 : n=j # taille du tableau afficher(t,n) def eliminer_occurrence(): for i in range (n-1): if (t[i]!=0) : for j in range(i+1,n): if (t[i]==t[j]): t[j]=0 afficher(t,n) def organiser(): for i in range(n-1): if t[i]==0 : j=i while (t[j]==0) and (j<n-1) : j=j+1 if t[j]!=0 : x=t[i] t[i]=t[j] t[j]=x afficher(t,n) windows.remplir_bt.clicked.connect ( createTab ) windows.eliminer_bt.clicked.connect ( eliminer_occurrence ) windows.organiser_bt.clicked.connect ( organiser ) windows.show() app.exec_() |
Exécution du programme
Tableau T après élimination des occurrences
Tableau T après le groupement des éléments
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