 
                        Un mot est zig-zag est un mot composé par des lettres majuscules et dont l’ordre alphabétique de ses lettres croissent et décroissant ou inversement d’une façon alternative.
Exemples:
- Le mot « ADAM » est zig-zag car l’ordre alphabétique de «A» est < à celui de « D » dont son ordre alphabétique est > à celui de « A » qui le suit et l’ordre alphabétique de « A » est < à celui de « M ». - Le mot « RANIM » est zig-zag car l’ordre alphabétique de «R» est > à celui de « A » dont son ordre alphabétique est < à celui de « N » qui le suit et l’ordre alphabétique de « N » est > à celui de « I » dont son ordre alphabétique est < à celui de « M ». - Le « PROGRAMME » est non zig-zag car l’ordre alphabétique de «P» est < à celui de « R » dont son ordre alphabétique est > à celui de « O » qui le suit et l’ordre alphabétique de « O » est > à celui de « G ».
Ecrire un programme Python qui permet de remplir un tableau T par N (5≤N≤10) mots composées par des lettres majuscules et dont les longueurs sont comprises entre 2 et 12 et d’afficher les mots zizag du tableau T.
Exemple : Pour N=6 et le tableau T suivant :
| BAC | TECH | PROGRAMME | INFO | SALUT | AHMED | 
Le programme affiche : « les mots ZIZAG sont : BAC INFO SALUT »
Pour résoudre ce problème, voici un algorithme qui permet de remplir un tableau avec des mots et d'identifier ceux qui sont "zig-zag" :
1. Initialisation
Créer un tableau T de taille N, où 5 ≤ N ≤ 10.
Remplir le tableau T avec N mots composés uniquement de lettres majuscules, où chaque mot a une longueur comprise entre 2 et 12 caractères.
2. Vérification des mots "zig-zag"
Pour chaque mot dans le tableau T :
a) Parcourir les lettres du mot deux par deux.
b) Si l'ordre alphabétique d'une lettre est croissant par rapport à la suivante, la suivante doit être décroissante par rapport à celle qui suit, et ainsi de suite.
c) De même, si l'ordre est décroissant, la suivante doit être croissante, puis de nouveau décroissante, etc.
d) Si toutes les comparaisons alternent correctement, le mot est considéré comme zig-zag.
3. Affichage des résultats
Parcourir le tableau et afficher tous les mots zig-zag identifiés.
.Dans cet algorithme, On va utiliser 3 fonctions et 2 procédures :

Algorithme du programme principal
| 1 2 3 4 5 6 7 | Algorithme nombres_riches Debut      n<-saisie_taille()      Ecrire('remplissage du tableau t')      remplir(t,n)      afficher_mots_zigzag(t,n) Fin | 
Déclaration des objets
| Objet | Type / Nature | 
|---|---|
| n | entier | 
| 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<5 ou n>10 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 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 entre 2 et 12
| 1 2 3 4 5 6 7 8 9 10 11 | Procédure remplir(@t:Tab,n:entier) Début   Pour i de 0 à n-1 faire     Ecrire(""donner elt en majuscule N° "+str(i)+" dont sa long entre 2 et 12:")      lire(t[i])     Tant que ((long(t[i])<2) ou (long(t[i])>12)) ou (verif_majus(t[i])=Faux) faire       Ecrire(""donner elt en majuscule N° "+str(i)+" dont sa long entre 2 et 12:")       lire(t[i])     Fin tant que   Fin pour Fin | 
Déclaration des objets
| Objet | Type / Nature | 
| i | entier | 
La fonction test_zig_zag
Cette fonction teste si un mot est zigzag ou non.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | Fonction test_zig_zag(ch:chaine):booleen Début         i<-0      test<-Vrai      zigzag<-(ch[0]>ch[1])      Tant que (test) et (i<long(ch)-2) faire          i<-i+1          Si (zigzag != (ch[i]>ch[i+1])) alors            zigzag<- not(zigzag)            test<-True          Sinon            test<-Faux       Fin tant que       retourner test  Fin | 
Déclaration des objets
| Objet | Type / Nature | 
|---|---|
| i | entier | 
| test | booléen | 
| zigzag | booléen | 
La procédure afficher_mots_zigzag
Cette procédure identifie et affiche les mots zizag.
| 1 2 3 4 5 6 7 8 9 | Procédure afficher_mots_zizag(t:Tab,n:entier) Début      Ecrire('les mots zigzag sont:'))      Pour i de 0 à n-1 faire         Si test_mot_zizag(t[i]) alors              Ecrire(t[i]) # afficher les mots zigzag sont         Fin si      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 | from numpy import array t=array([str]*20) #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_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):     for i in range (n) :        t[i]=input("donner elt en majuscule N° "+str(i)+" dont sa long entre 2 et 12: ")        while ((len(t[i])<2) or (len(t[i])>12)) or (verif_majus(t[i])==False) :           t[i]=input("donner elt en majuscule N° "+str(i)+" dont sa long entre 2 et 12: ")     def test_zig_zag(ch) :        i=0      test=True      zigzag=(ch[0]>ch[1])      while (test) and (i<len(ch)-2):            i=i+1            if (zigzag != (ch[i]>ch[i+1])):                zigzag= not(zigzag)                test=True            else:                test=False      return test     def afficher_mots_zigzag(t,n):     print('les mots zigzag sont:')     for i in range (n) :        if test_zig_zag(t[i]):          print(t[i]) #programme principal n=saisie_taille() print('remplissage du tableau t') remplir(t,n) afficher_mots_zigzag(t,n) | 
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 identifier et afficher les mots zizag
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é 'bt_recherche' pour exécuter le module afficher_mots_zizgag.
QLabel nommé 'msg' pour afficher des 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 | 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 # 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 di 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_long=True         # parcourir les caracteres de la chaine         while((i<len(ch)) and (test_long) and (('A'<=ch[i]<='Z') or (ch[i]==' '))):             if ('A'<=ch[i]<='Z'):                 ch1=ch1+ch[i]             if ((ch[i]==' ') or (i==len(ch)-1)) :                    t[j]=ch1                 ch1=''                 test_long=(2<=len(t[j])<=12)                 j=j+1                           i=i+1         if (i<len(ch)) or (test_long==False) :             windows.msg.setText("La chaine doit contenir des mots en majuscules et de longueur entre 2 et 12")         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 test_zig_zag(ch) :        i=0      test=True      zigzag=(ch[0]>ch[1])      while (test) and (i<len(ch)-2):            i=i+1            if (zigzag != (ch[i]>ch[i+1])):                zigzag= not(zigzag)                test=True            else:                test=False      return test     def afficher_mots_zigzag():     liste=''     for i in range (n) :        if test_zig_zag(t[i]):          liste=liste+t[i]+'\n'     windows.resultat.setText(liste)   windows.remplir_bt.clicked.connect ( createTab ) windows.bt_recherche.clicked.connect ( afficher_mots_zigzag )  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