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