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