Soit un tableau T de n caractères (5≤n≤15) qui ne peuvent être que A, B ou C et tels que deux éléments successifs du tableau ne sont pas égaux.
On se propose d’insérer un caractère Car dans la première position possible dans le tableau T en respectant la règle ci-dessus mentionnée puis d’afficher le tableau T dans son nouvel état (après insertion)
Exemple : T à l’état initial
B | A | B | C | A | C | B | A |
T après l’insertion d’un caractère Car= « B »
B | A | B | C | B | A | C | B | A |
Voici une approche pour insérer un caractère Car
dans le tableau T
tout en respectant la règle selon laquelle deux caractères successifs ne doivent pas être égaux :
1- Parcourez le tableau T
pour trouver la première position où le caractère Car
peut être inséré sans que cela entraîne deux caractères successifs identiques.
2- Insérez le caractère à la position trouvée.
3- Si aucune position n'est trouvée, ajoutez simplement le caractère à la fin du tableau.
4- Affichez le tableau mis à jour.
Dans cet algorithme, On va utiliser 3 fonctions et deux procédures:
Algorithme du programme Principal
1 2 3 4 5 6 7 8 9 10 |
Algorithme insertion_caractere Debut n<-saisie_taille() Ecrire('Remplissage du tableau t') remplir(t,n) c<-saisie_lettre() inserer_lettre(t,n,c) Ecrire('tableau t apres insertion de '+c) afficher(t,n+1) Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
n | entier |
t | tableaux des caractères |
c | caractère |
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 les lettres 'A', 'B' ou 'C' tels 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 15 16 17 |
procedure remplir(@t:tab;n:entier) Début Ecire("donner une lettre A, B ou C pour elt N°0: ") lire(t[0]) Tant que (t[0] n'est pas dans {'A','B','C'}) : Ecire("donner une lettre A, B ou C pour elt N°0: ") lire(t[0]) Fin tant que Pour i de 1 à n-1 faire Ecrire("donner une lettre A, B ou C pour elt N°"+i+": ") lire(t[i]) Tant que (t[i] n'est pas dans {'A','B','C'}) ou (t[i]==t[i-1]) faire Ecrire("donner une lettre A, B ou C pour elt N°"+i+": ") lire(t[i]) Fin tant que Fin pour Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
La fonction saisie_caractere
Cette fonction saisit une lettre parmi ces trois lettres 'A', 'B' et 'C'.
1 2 3 4 5 6 7 8 9 10 |
fonction saisie_caractere():caractere Début Ecrire("donner une lettre A, B ou C : ") Lire(c) Tant que (c n'est pas dans {'A','B','C'}) faire Ecrire("donner une lettre A, B ou C : ") Lire(c) Fin tant que retourner c Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
c | caractère |
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 afficher
Cette procédure affiche les éléments du tableau
1 2 3 4 5 6 |
procedure remplir(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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
from numpy import array t=array([str()]*50) #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): t[0]=input("donner une lettre A, B ou C pour elt N°0: ") while (t[0] not in {'A','B','C'}) : t[0]=input("donner une lettre A, B ou C pour elt N°0: ") for i in range (1,n) : t[i]=input("donner une lettre A, B ou C pour elt N°"+str(i)+": ") while (t[i] not in {'A','B','C'}) or (t[i]==t[i-1]): t[i]=input("donner une lettre A, B ou C pour elt N°"+str(i)+": ") def saisie_lettre(): c=input("donner une lettre A, B ou C : ") while (c not in {'A','B','C'}): c=input("donner une lettre A, B ou C : ") return c def afficher(t,n): for i in range (n) : print('t['+str(i)+']= '+t[i]) def inserer_lettre(t,n,c): i=1 #recherche la bonne position pour inserer le caractere c while (c==t[i-1]) or (c==t[i]): i=i+1 #faire decaler les element du tableau à droite à partir de la position i for j in range(n,i,-1): t[j]=t[j-1] #inserer le carcatere c dans le tableau t[i]=c #programme principal n=saisie_taille() print('Remplissage du tableau t') remplir(t,n) c=saisie_lettre() inserer_lettre(t,n,c) print('tableau t apres insertion de '+c) afficher(t,n+1) |
Exécution du programme
Pour créer une application en Python et Designer QT qui insérer un caractère Car dans la première position possible dans le tableau T en respectant la règle ci-dessus mentionnée puis d’afficher le tableau T dans son nouvel état, 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 lettres.
QPushButton
nommé 'remplir_bt pour mettre les lettres dans le tableau t
QLabel
nommé 'msg' pour afficher des messages d'erreur
QLineEdit
nommé 'c' pour entrer une lettre par 'A', 'B' ou 'C'.
QPushButton
nommé 'bt_inserer' 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 84 85 86 |
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 # 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='' test_unicite=True # parcourir les caracteres de la chaine while (i<len(ch)) and test_unicite and (ch[i] in {'A','B','C',' '}) : if (ch[i] in {'A','B','C'}): t[j]=ch[i] if j>0: test_unicite=(t[j]!=t[j-1]) j=j+1 print(str(i)) i=i+1 if (i<len(ch)) or (test_unicite==False): windows.msg.setText("La chaine doit contenir A,B ou C tq deux éléments successifs ne sont pas egaux") else : 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") def inserer_lettre(): c = windows.c.text() i=1 while (c==t[i-1]) or (c==t[i]): i=i+1 for j in range(n,i,-1): t[j]=t[j-1] t[i]=c tab='' for k in range (n+1) : 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_inserer.clicked.connect ( inserer_lettre ) windows.show() app.exec_() |
Exécution du programme
1) Remplissage du tableau
2) Insertion du caractère c dans le tableau
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