On se propose d’écrire un programme Python permettant de remplir deux tableaux V1 et V1 respectivement par n et m entiers (avec n et m deux entiers de l’intervalle [2..30] et les éléments de V1 et V2 sont saisis dans un ordre strictement croissant), puis de fusionner les éléments de ces deux tableaux dans un tableau V3 en éliminant les redondances et en gardant l’ordre croissant des éléments. Enfin, le programme affichera les éléments du tableau V3.
Exemple :
Si n=5, m=7 et les éléments de deux tableaux V1 et V2 sont :
V1
4 | 7 | 8 | 9 | 12 |
V2
0 | 2 | 4 | 7 | 10 | 12 | 28 |
V3
0 | 2 | 4 | 7 | 8 | 9 | 10 | 12 | 28 |
Pour résoudre ce problème, nous devons suivre les étapes suivantes :
1- Saisie des valeurs de n1 et n2 : Vérifiez que n1 et n2 sont bien dans l'intervalle [2..30].
2- Saisie des éléments des tableaux V1 et V2 : Assurez-vous que les éléments sont saisis dans un ordre strictement croissant.
3- Fusion des tableaux V1 et V2 dans V3 : Combinez les deux tableaux en éliminant les doublons et en maintenant l'ordre croissant.
4- Affichage des éléments de V3: Imprimez les éléments du tableau fusionné.
Dans cet algorithme, On va utiliser une fonction et 3 procédures :
Algorithme du programme principal
1 2 3 4 5 6 7 8 9 10 11 12 |
Algorithme fusion_tableaux Debut Ecrire('remplissage du tableau v1') n1<-saisie_taille() remplir(v1,n) Ecrire('remplissage du tableau v2') n2<-saisie_taille() remplir(v2,n) fusion(v1,v2,v3,n1,n2) Ecrire('tableau fusion de deux tableaux v1 et v2') afficher_tableau(v3,taille_fusion,'v3') Fin |
Déclaration des objets
Objet | Type / Nature |
n1 | entier |
n2 | entier |
v1 | tableau de 30 entiers |
v2 | tableau de 30 entiers |
v3 | 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 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 distincts et d'une façon croissante.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Procédure remplir(@t:Tab,n:entier) Début Ecrire('donner elt N°0:') lire(t[0]) Pour i de 1 à n-1 faire Ecrire('donner elt N°',i,':') lire(t[i]) Tant que (t[i] <= t[i-1]) alors Ecrire('donner elt N°',i,':') lire(t[i]) Fin tant que Fin pour Fin |
Déclaration des objets
Objet | Type / Nature |
i | entier |
La procédure fusion
Cette procédure fusionne les éléments de deux tableaux V1 et V2 dans un tableau V3 en éliminant les redondances et en gardant l’ordre croissant des éléments.
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 |
Procédure fusion(t1:Tab,t2:tab,@t3:tab,n1:entier,n2:entier) Début i<-0 j<-0 k<--1 Tant que (i<n1) et (j<n2) faire k<-k+1 Si (t1[i]<t2[j]) alors t3[k]<-t1[i] i<-i+1 Sinon si (t1[i]>t2[j]) alors t3[k]<-t2[j] j<-j+1 Sinon t3[k]<-t1[i] i<-i+1 j<-j+1 Finsi Fin Tant que Si i<=n1-1 alors Pour c de i à n1-1 faire k<-k+1 t3[k]<-t1[c] Fin pour Sinon si j<=n2-1 alors Pour c de j à n2-1 faire k<-k+1 t3[k]<-t2[c] Fin pour taille_fusion<-k+1 Fin |
Déclaration des objets
Name | Age |
i | entier |
j | entier |
k | entier |
taille_fusion (variable globale) | entier |
La procédure afficher_tableau
Cette procédure affiche les éléments du tableau.
1 2 3 4 5 6 |
Procédure afficher_tableau(t:Tab,n:entier,nom_tab:chaine) Début Pour i de 0 à n-1 faire Ecrire(nom_tab,'[',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 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 |
from numpy import array v1=array([int()]*30) # remplir ce tableau par des entiers distincts v2=array([int()]*30) # remplir ce tableau par des entiers distincts v3=array([int()]*30) # on va stocker les valeurs communs des deux tableaux 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): # remplir ce tableau par des entiers distincts t[0]=int(input("donner elt N°0: ")) for i in range (1,n) : t[i]=int(input("donner elt N°"+str(i)+"> "+str(t[i-1])+': ')) while t[i] <= t[i-1]: t[i]=int(input("donner elt N°"+str(i)+"> "+str(t[i-1])+': ')) def fusion(t1,t2,t3,n1,n2): global taille_fusion i=0 j=0 k=-1 while (i<n1) and (j<n2): k=k+1 if (t1[i]<t2[j]): t3[k]=t1[i] i=i+1 elif (t1[i]>t2[j]): t3[k]=t2[j] j=j+1 else: t3[k]=t1[i] i=i+1 j=j+1 if i<=n1-1 : for c in range(i,n1) : k=k+1 t3[k]=t1[c] elif j<=n2-1 : for c in range(j,n2) : k=k+1 t3[k]=t2[c] taille_fusion=k+1 def afficher_tableau(t,n,nom_tab): for i in range (n) : print(nom_tab+'['+str(i)+']= '+ str(t[i])) #programme principal print('remplissage du tableau v1') n1=saisie_taille() remplir(v1,n1) print('remplissage du tableau v2') n2=saisie_taille() remplir(v2,n2) fusion(v1,v2,v3,n1,n2) print('tableau fusion de deux tableaux v1 et v2') afficher_tableau(v3,taille_fusion,'v3') |
Exécution du programme
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 fusionner les éléments des deux tableaux V1 et V2 dans un tableau V3
a- Ouvrez Qt Designer et créez un nouveau fichier de type Main Window.
b- Ajoutez ces widgets:
QLineEdit
nommé 'ch1' pour entrer des entiers .
QPushButton
nommé 'remplirv1_bt' pour exécuter le module createTab1 afin de remplir le tableau à partir de la chaine 'ch1'.
QLineEdit
nommé 'ch2' pour entrer des entiers .
QPushButton
nommé 'remplirv2_bt' pour exécuter le module createTab2 afin de remplir le tableau à partir de la chaine 'ch2'.
QPushButton
nommé 'fusion_bt' pour exécuter le module fusionV1V2.
QLabel
nommé 'msg' pour afficher un message d'erreur si ch est vide ou contient des valeurs non numériques .
QLabel
nommé 'v1_label' pour afficher les éléments du tableau V1.
QLabel
nommé 'v2_label' pour afficher les éléments du tableau V2.
QLabel
nommé 'v3_label' pour afficher les éléments du tableau V3.
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 156 157 |
from PyQt5.uic import loadUi from PyQt5 import QtCore, QtGui from PyQt5.QtWidgets import * from PyQt5 import QtCore, QtGui, QtWidgets from numpy import array import math v1=array([int()]*30) # remplir ce tableau par des entiers distincts v2=array([int()]*30) # remplir ce tableau par des entiers distincts v3=array([int()]*30) # on va stocker les valeurs communs des deux tableaux 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_croissance(t,n): i=0 while t[i]<t[i+1] and i <n-2 : i=i+1 return t[i]<t[i+1] def createTab1(): windows.v1_label.clear() global taille_v1 # pour la taille de deux tableaux ch = windows.ch1.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=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)) : v1[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_v1=n print(verif_croissance(v1,n)) if verif_croissance(v1,n) : tab='' for k in range (j) : tab=tab+ 'v1['+str(k)+']= '+ str(v1[k])+ '\n' #afficher les elements du tableau windows.v1_label.setText(tab) else : windows.msg.setText("la chaîne contient des valeurs numeriques d'une façon non strictement croissante") def createTab2(): windows.v2_label.clear() global taille_v2 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=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)) : v2[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 : taille_v2=j if verif_croissance(v2,taille_v2) : tab='' for k in range (j) : tab=tab+ 'v2['+str(k)+']= '+ str(v2[k])+ '\n' #afficher les elements du tableau windows.v2_label.setText(tab) else : windows.msg.setText("la chaîne contient des valeurs numeriques d'une façon non strictement croissante") def fusionV1V2(): i=0 j=0 k=-1 while (i<taille_v1) and (j<taille_v2): k=k+1 if (v1[i]<v2[j]): v3[k]=v1[i] i=i+1 elif (v1[i]>v2[j]): v3[k]=v2[j] j=j+1 else: v3[k]=v1[i] i=i+1 j=j+1 if i<=taille_v1-1 : for c in range(i,taille_v1) : k=k+1 v3[k]=v1[c] elif j<=taille_v2-1 : for c in range(j,taille_v2) : k=k+1 v3[k]=v2[c] tab='' for i in range (k+1) : tab=tab+ 'v3['+str(i)+']= '+ str(v3[i])+ '\n' #afficher les elements du tableau windows.v3_label.setText(tab) windows.remplirv1_bt.clicked.connect ( createTab1 ) windows.remplirv2_bt.clicked.connect ( createTab2 ) windows.fusion_bt.clicked.connect ( fusionV1V2 ) windows.show() app.exec_() |
Exécution du programme
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