La segmentation d’un tableau T de N entiers par rapport à l’élément numéro 1 du tableau consiste à placer les éléments inférieurs ou égaux à T[0] à sa gauche et les éléments strictement supérieurs à T[0] à sa droite.
Exemple :
Soient N=10 et le tableau suivant :
125 | 10 | 34 | 48 | 125 | 1026 | 22 | -365 | 411 | 192 |
La segementation de T par rapport à l’élément numéro 1 donne le tableau suivant :
10 | 34 | 48 | 125 | 22 | -365 | 125 | 1026 | 411 | 192 |
N.B : L’ordre d’apparition des éléments inférieurs ou égaux à T[0] et celui des éléments strictement supérieurs à T[0] doit rester le même que dans le tableau initial.
Ecrire un programme Python qui permet de saisir un entier N(2<=N<=30), de rempli un tableau T par N entiers, de segmenter le tableau T par rapport à T[0] et d’afficher le tableau T segmenté.
Demander à l'utilisateur de saisir un entier n tel que 2≤n≤30 .
Vérifier que la valeur saisie est dans l'intervalle autorisé. Si ce n'est pas le cas, redemander la saisie jusqu'à obtenir une valeur correcte.
Initialiser un tableau T vide.
Demander à l'utilisateur de saisir n entiers et les ajouter successivement au tableau T.
Initialiser une variable x
avec la valeur de T[0].
a- Utiliser deux indices i
qui commence à l'index 1 (juste après le pivot).
a- Utiliser deux indices j qui commence à l'index i .
b- Parcourir le tableau en comparant les éléments à x
:
Si T[i] est inférieur ou égal à x
, avancer i
d'une position.
Si T[i] est strictement inférieur à x
, échanger T[i] avec T[i-1].
Si T[i] est égal à x
, j
prend la valeur de i
Répéter ce processus jusqu'à ce que i
dépasse la taille du tableau.
Afficher le tableau T segmenté, où tous les éléments inférieurs ou égaux à t[0] sont à gauche et tous les éléments strictement supérieurs à t[0] sont à droite.
Dans cet algorithme, On va utiliser une fonction et trois procédures :
Algorithme du programme principal
1 2 3 4 5 6 7 8 9 |
Algorithme segmenter_tableau Debut n<-saisie_taille() Ecrire('remplissage du tableau t') remplir(t,n) segmenter(t,n) Ecrire('tableau segmente t') afficher_tableau(t,n) Fin |
Déclaration des objets
Objet | Type / Nature |
n | entier |
t | tableau de 30 entiers |
La fonction saisie_taille
Cette fonction retourne un entier n entre 2 et 30 saisi par l'utilisateur.
1 2 3 4 5 6 7 8 9 10 |
foncttion saisie_taille() Début Ecrire('donner un entier entre 2 et 30') lire (n) Tant que n<2 ou n>30 faire Ecrire('donner un entier entre 2 et 30') 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.
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 |
Objet | Type / Nature |
i | entier |
La procédure segmenter
Cette procédure transforme le tableau T afin d'obtenir tous les éléments inférieurs ou égaux à t[0] sont à gauche et tous les éléments strictement supérieurs à t[0] sont à droite..
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Procédure segmenter(@t:Tab,n:entier) Début x<-t[0] j<-1 permut<-Vrai Tant que permut=Vrai faire permut<-Faux Pour i de j à n-1 faire Si (t[i]<x) alors permut<-Vrai temp<-t[i-1] t[i-1]<-t[i] t[i]<-temp Finsi Si (t[i]=x) alors j<-i Finsi Fin pour Fin tant que Fin |
Objet | Type / Nature |
i | entier |
j | entier |
x | entier |
temp | entier |
La procédure afficher
Cette procédure affiche les éléments du tableau.
1 2 3 4 5 6 7 |
Procédure afficher(t:Tab,n:entier) Début Pour i de 0 à n-1 faire Ecrire('t[',i,']=') Ecrire(t[i]) Fin pour Fin |
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 |
from numpy import array t=array([int()]*30) def saisie_taille() : n=int(input("donner un entier entre 2 et 30 ")) while(2>n) or (n>30) : n=int(input("donner un entier entre 2 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 segmenter(t,n): x=t[0] j=1 permut=True while permut==True: permut=False for i in range (j,n) : if (t[i]<x): permut=True temp=t[i-1] t[i-1]=t[i] t[i]=temp if (t[i]==x): j=i n=saisie_taille() print('remplissage du tableau t') remplir(t,n) segmenter(t,n) print('tableau segmente t') afficher_tableau(t,n) |
Exécution du programme
Le tableau T après la segmentation:
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 afficher segmenter le tableau T des n entiers en utilisant Qt Designer pour l'interface graphique, suivez 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 des entiers .
QPushButton
nommé 'remplir_bt' pour exécuter le module createTab afin de remplir le tableau à partir de la chaine 'ch'.
QPushButton
nommé 'segmenter_bt' pour exécuter le module segmenterTab afin de segmenter le tableau T .
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.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 |
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 # 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]==' ') 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 : 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) def segmenterTab(): x=t[0]; j=1 ; permut=True while permut==True: permut=False for i in range (j,n) : if (t[i]<x): permut=True temp=t[i-1] t[i-1]=t[i] t[i]=temp if (t[i]==x): j=i 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) windows.remplir_bt.clicked.connect ( createTab ) windows.segmenter_bt.clicked.connect ( segmenterTab ) windows.show() app.exec_() |
Exécution du programme
Le tableau T après la segmentation:
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