On définit le degré de ressemblance DR entre deux mots de même longueur par la formule suivante : DR= (nombre de caractères en commun bien placés / longueur du mot) * 100 (Un caractère est dit bien placé lorsqu’il occupe la même position dans les deux mots.
Exemples :
- Pour mot1= « EXEMPLE » et mot2 »EXAMENS » à DR=(3/7)*100=42.85
- Pour mot1= « TRAITEMENTS » et mot2 = « IFORMATIQUE » à DR=(0/11)*100=00.00
Ecrire un programme Python qui permet de saisir une chaine Ch non vide et composée de lettres majuscules, puis de remplir un tableau T par N(5≤N≤10) chaines de caractères composées de lettres majuscules et de même longueur que Ch et d’afficher le degré de ressemblance entre ch et les éléments de T.
Pour résoudre ce problème, voici le principe de l'algorithme qui permet de calculer le degré de ressemblance (DR) entre une chaîne de caractères Ch
et les éléments d'un tableau T
de chaînes de caractères de même longueur :
1. Saisie de la chaîne Ch
1- Demander à l'utilisateur de saisir une chaîne ch
composée de lettres majuscules.
2- Vérifier que ch
n'est pas vide.
2. Remplir le tableau T
1- Demander à l'utilisateur de saisir un nombre N
(où 5 ≤ N ≤ 10
).
2- Remplir le tableau T
avec N
chaînes de caractères, chacune composée uniquement de lettres majuscules et ayant la même longueur que ch
.
3- Vérifier que chaque chaîne saisie a bien la même longueur que ch
.
3. Calcul du degré de ressemblance (DR)
Pour chaque mot dans le tableau T
:
a) Comparer Ch
et le mot : Parcourir les caractères des deux chaînes et compter le nombre de caractères bien placés (caractères identiques aux mêmes positions).
b) Calculer le DR : Utiliser la formule : DR=(nombre de caractères en commun bien placés / longueur du mot) * 100
4. Affichage des résultats
Afficher le DR pour chaque chaîne du tableau T
par rapport à Ch
.
Dans cet algorithme, On va utiliser 4 fonctions et 2 procédures :
Algorithme du programme principal
1 2 3 4 5 6 7 8 |
Algorithme degres_ressemblances Debut ch<-saisie_ch() n<-saisie_taille() Ecrire('remplissage du tableau t') remplir(t,n,ch) afficher_degre_ressemblance(t,n,ch) Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
n | entier |
ch | chaîne des caractères |
t | tableau des 20 chaînes des caractères |
La fonction saisie_taille
Cette fonction retourne un entier n entre 5 et 10 saisi par l'utilisateur.
1 2 3 4 5 6 7 8 9 10 |
foncttion saisie_taille():entier Début Ecrire('donner un entier entre 5 et 10') lire (n) Tant que n<3 ou n>30 faire Ecrire('donner un entier entre 5 et 10') lire (n) Fin tant que retourner n Fin |
Déclaration des objets
Objet | Type / Nature |
n | entier |
La fonction saisie_ch
Cette fonction retourne une chaîne de caractères formée des lettres majuscules.
1 2 3 4 5 6 7 8 9 10 |
foncttion saisie_ch():chaine Début Ecrire('donner une chaine composee des lettres majuscules:') lire (ch) Tant que (verif_majus(ch)==Faux) faire Ecrire('donner une chaine composee des lettres majuscules:') lire (ch) Fin tant que retourner ch Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
ch | chaine des caracteres |
La fonction verif_majus
Cette fonction vérifie si une chaine est composé uniquement des lettres majuscules ou non.
1 2 3 4 5 6 7 8 9 10 11 |
foncttion verif_majus(ch:chaine):booleen Début i<-0 Tant que ('A'<=ch[i]<='Z') et (i<len(ch)-1) faire i<-i+1 Fin tant que Si ('A'<=ch[i]<='Z') alors retourner Vrai Sinon retuurner Faux Fin |
Déclaration des objets
Objet | Type / Nature |
i | entier |
La procédure remplir
Cette procédure remplit le tableau t des mots composé uniquement des lettres majuscules et dont ses longueurs sont égaux à long de ch
1 2 3 4 5 6 7 8 9 10 11 |
Procédure remplir(@t:Tab,n:entier,ch:chaine) Début Pour i de 0 à n-1 faire Ecrire(""donner elt en majuscule N° "+str(i)+" dont sa long="+long(ch)) lire(t[i]) Tant que (long(t[i])!=long(ch)) ou (verif_majus(t[i])=Faux) faire Ecrire(""donner elt en majuscule N° "+str(i)+" dont sa long="+long(ch)) lire(t[i]) Fin tant que Fin pour Fin |
Déclaration des objets
Objet | Type / Nature |
i | entier |
La fonction calcul_ressemblance
Cette fonction calcule le degré de ressemblance entre deux chaînes.
1 2 3 4 5 6 7 8 9 10 |
Fonction calcul_ressemblance(ch1:chaine,ch2:chaine):entier Début cp<-0 Pour i de 0 à long(ch1)-1 faire Si (ch1[i]==ch2[i]) alors cp<-cp+1 Fin si Fin pour retourner (cp/long(ch1))*100; Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
cp | entier |
La procédure afficher_degre_ressemblance
Cette procédure calcule et affiche le DR pour chaque chaîne du tableau T
par rapport à ch
.
1 2 3 4 5 6 |
Procédure afficher_degre_ressemblance(t:Tab,n:entier,ch:chaine) Début Pour i de 0 à n-1 faire Ecrire('degre de ressemblance entre '+ch+' et '+t[i]+'= '+calcul_ressemblance(ch,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]*30) #declaration du tableau des chaines def verif_majus(ch): i=0 while ('A'<=ch[i]<='Z') and (i<len(ch)-1): i=i+1 if ('A'<=ch[i]<='Z'): return True else: return False def saisie_ch() : ch=input("donner une chaine composee des lettres majuscules: ") while(verif_majus(ch)==False) : ch=input("donner une chaine composee des lettres majuscules: ") return ch def saisie_taille() : n=int(input("donner un entier entre 5 et 10: ")) while(n<5) or (n>10) : n=int(input("donner un entier entre 5 et 10: ")) return n def remplir(t,n,ch): for i in range (n) : t[i]=input("donner elt en majuscule N° "+str(i)+" dont sa longueur="+str(len(ch))+': ') while (len(t[i])!=len(ch)) or (verif_majus(t[i])==False) : t[i]=input("donner elt en majuscule N° "+str(i)+" dont sa longueur="+str(len(ch))+': ') def calcul_ressemblance(ch1,ch2) : cp=0 for i in range(len(ch1)): if (ch1[i]==ch2[i]): cp=cp+1 return (cp/len(ch1))*100; def afficher_degre_ressemblance(t,n,ch): for i in range (n) : print('degre de ressemblance entre '+ch+' et '+t[i]+'= '+str(calcul_ressemblance(ch,t[i]))) #programme principal ch=saisie_ch() n=saisie_taille() print('remplissage du tableau t') remplir(t,n,ch) afficher_degre_ressemblance(t,n,ch) |
Exécution du programme
Pour remplir un tableau des chaînes à 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 mots.
3- Ajouter chaque sous-chaîne au tableau.
Pour créer une application en Python pour calculer et afficher le DR pour chaque chaîne du tableau T
par rapport à ch
.
a- Ouvrez Qt Designer et créez un nouveau fichier de type Main Window.
b- Ajoutez ces widgets:
QLineEdit
nommé 'ch' pour entrer le mot.
QLineEdit
nommé 'tab_ch' pour entrer les chaines à mettre dans le tableau.
QPushButton
nommé 'remplir_bt' pour exécuter le module createTab afin de remplir le tableau à partir de la chaine 'ch'.
QPushButton
nommé 'bt_calcul' pour exécuter le module afficher_degre_ressemblance.
QLabel
nommé 'msg' pour afficher les messages d'erreur
QLabel
nommé 'tab_label' pour afficher les éléments du tableau T.
QLabel
nommé 'resultat' pour afficher les mots zigzag.
Enregistrez le fichier avec l'extension .ui
, par exemple tabtab-2.ui
.
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 |
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]*100) 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_majus(ch): i=0 while ('A'<=ch[i]<='Z') and (i<len(ch)-1): i=i+1 if ('A'<=ch[i]<='Z'): return True else: return False # Procedure qui remplit un tableau par des entiers a partir d'une chaine des caractère def createTab(): windows.msg.clear() ch = windows.ch.text() tab_ch = windows.tab_ch.text() global n # pour la taille di tableau if (ch=="") or (tab_ch=="") or (verif_majus(ch)==False): windows.msg.setText("Veuillez remplir les deux chaînes en majuscules") else: windows.msg.clear() # effacer le message d erreur tab_ch= supprimer_espaces(tab_ch) i=0 j=0 ch1='' test_long=True # parcourir les caracteres de la chaine while((i<len(tab_ch)) and (test_long) and (('A'<=tab_ch[i]<='Z') or (tab_ch[i]==' '))): if ('A'<=tab_ch[i]<='Z'): ch1=ch1+tab_ch[i] if ((tab_ch[i]==' ') or (i==len(tab_ch)-1)) : t[j]=ch1 ch1='' test_long=(len(t[j])==len(ch)) j=j+1 i=i+1 if (i<len(tab_ch)) : windows.msg.setText("La chaine doit contenir des mots en majuscules et de longueur="+str(len(ch))) else : if 5<=j<=10: # 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 10") def calcul_ressemblance(ch1,ch2) : cp=0 for i in range(len(ch1)): if (ch1[i]==ch2[i]): cp=cp+1 return (cp/len(ch1))*100; def afficher_degre_ressemblance(): ch = windows.ch.text() liste='' for i in range (n) : liste=liste+'degre de ressemblance entre '+ch+' et '+t[i]+'= '+str(calcul_ressemblance(ch,t[i]))+'\n' windows.resultat.setText(liste) windows.remplir_bt.clicked.connect ( createTab ) windows.bt_calcul.clicked.connect ( afficher_degre_ressemblance ) 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