Une séquence nulle d’un tableau d’entiers T est un ensemble d’éléments consécutifs dont la somme de valeurs est égale à zéro.
On se propose d’écrire un programme Python qui permet de remplir un tableau T par n entiers (avec 3≤N≤15) et d’afficher les entiers de chacune de ces séquences et le nombre de séquences nulles de ce tableau.
Exemple : Pour N=12 et le tableau T suivant :
Le programme affiche :
Les séquences nulles sont :
5, 12,-6 ,-11
15, -11, -4
-4, 4
4, -4
Le nombre de séquences paires est 4
Voici le principe algorithmique pour remplir un tableau d'entiers T
avec 3≤n≤153 \leq n \leq 15, identifier les séquences nulles (sous-ensembles consécutifs dont la somme est égale à zéro), afficher ces séquences et compter le nombre de séquences nulles.
1- Lire la taille n
du tableau (3≤n≤15)
2- Si n<3 ou n>15, afficher un message d'erreur : "La taille du tableau doit être comprise entre 3 et 15" et retourner à l'étape 1
3- Pour chaque index i allant de 0 à n−1: Lire l'entier à la position ii dans le tableau T
4- Initialiser le compteur cp
à 0 pour compter les séquences nulles
5- Parcourir toutes les sous-séquences possibles du tableau :
Pour chaque index i allant de 0 à n−1 :
Pour chaque index j allant de i à n-1 :
Calculer la somme des éléments de la sous-séquence de T[i]
à T[j]
Si la somme est égale à zéro :
Afficher "Séquence nulle :"
Afficher les éléments de la sous-séquence T[i] à T[j]
Incrémenter cp
de 1
3- Afficher le nombre de séquences nulles : "Nombre de séquences nulles = nb_sequences
"
Dans cet algorithme, On va utiliser une fonction et deux procédures:
Algorithme du programme Principal
1 2 3 4 5 6 7 |
Algorithme sequences_paires Debut n<-saisie_taille() Ecrire('Remplissage du tableau t') remplir(t,n) afficher_sequences_nulles(t,n) Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
n | entier |
t | tableau des entiers |
La fonction saisie_taille
Cette fonction saisit un entier entre 3 et 20.
1 2 3 4 5 6 7 8 9 10 |
fonction saisie_taille():entier Début Ecrire('donner un entier entre 3 et 15') Lire(n) Tant que (n<3) ou (n>15) faire Ecrire('donner un entier entre 3 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 des chiffres.
1 2 3 4 5 6 7 |
procedure remplir(@t:tab;n:entier) Début Pour i de 0 à n-1 faire Ecrire("donner t["+i+"]:") lire(t[i]) Fin pour Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
La procédure afficher_sequences_nulles
Cette procédure recherche et affiche les entiers de chaque séquence nulle du tableau.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
procedure afficher_sequences(t:tab;n:entier) Début cp<-0 Ecrire('les sequences nulles sont: ') Pour i de 0 à n-1 faire liste_nulle<-'' s<-0 j<-i test_nulle<-Faux Tant que (test_nulle=Faux) et (j<=n-1) faire s<-s+t[j] liste_nulle<-liste_nulle+str(t[j])+', ' j<-j+1 si (s=0) alors # si la somme des entiers egal a 0 liste_nulle<-Sous_chaine(liste_nulle,0,long(liste_nulle)-2]#effacer la derniere virgule ecrire(liste_nulle) # afficher les entiers de la sequence nulle cp<-cp+1 # incrementer le nombre des sequences test_nulle<-Vrai Fin si Fin tant que Ecrire('le nombre de sequences nulles est '+cp) Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
cp | entier |
s | entier |
test_nulle | booléen |
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 |
from numpy import array t=array([str]*30) #declaration du tableau des entiers def saisie_taille() : n=int(input("donner un entier entre 3 et 15: ")) while(n<3) or (n>15) : n=int(input("donner un entier entre 3 et 15: ")) return n def remplir(t,n): for i in range (n) : t[i]=int(input("donner t["+str(i)+"]: ")) def afficher_sequences_nulles(t,n): cp=0 print('les sequences nulles sont: ') for i in range(n-1): liste_nulle='' s=0 j=i test_nulle=False while (test_nulle==False) and (j<=n-1): s=s+t[j] liste_nulle=liste_nulle+str(t[j])+', ' j=j+1 if (s==0): liste_nulle=liste_nulle[0:len(liste_nulle)-2]#effacer la derniere virgule print(liste_nulle) cp=cp+1 test_nulle=True print('le nombre de sequences nulles est '+str(cp)) #programme principal n=saisie_taille() print('Remplissage du tableau t') remplir(t,n) afficher_sequences_nulles(t,n); |
Exécution du programme
Pour créer une application en Python et Designer QT qui remplit un tableau T par n entiers (avec 3≤N≤20) et affiche les entiers de chacune de ces séquences et le nombre de séquences nulles de ce tableau, 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 entiers.
QPushButton
nommé 'remplir_bt pour mettre les entiers dans le tableau t
QLabel
nommé 'msg' pour afficher des messages d'erreur
QPushButton
nommé 'bt_recherche' pour rechercher les séquences nulles
QLabel
nommé 'tab_label' pour afficher les entiers du tableau
QLabel
nommé 'resultat' pour afficher les séquences nulles
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 87 88 89 90 91 92 93 |
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([int()]*30) 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 a partir d'une chaine des caractère def createTab(): ch = windows.ch.text() windows.msg.clear() windows.resultat.clear() 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='' # parcourir les caracteres de la chaine while((i<len(ch)) and (('0'<=ch[i]<='9') or (ch[i]=='-') or ch[i]==' ' )): if ('0'<=ch[i]<='9') or (ch[i]=='-') : ch1=ch1+ch[i] if ((ch[i]==' ') or (i==len(ch)-1)) : t[j]=int(ch1) ch1='' j=j+1 i=i+1 if (i<len(ch)): windows.msg.setText("La chaine doit contenir des entiers ") else : if 3<=j<=25: n=j tab='' for k in range (j) : tab=tab+ 't['+str(k)+']= '+ str(t[k])+ '\n' #afficher les elements du tableau windows.tab_label.setText(tab) else: windows.msg.setText("La taille du tableau entre 3 et 25 ") def afficher_sequences_nulles(): cp=0 liste='les sequences nulles sont: \n' for i in range(n-1): liste_nulle='' s=0 j=i test_nulle=False while (test_nulle==False) and (j<=n-1): s=s+t[j] liste_nulle=liste_nulle+str(t[j])+', ' j=j+1 if (s==0): liste_nulle=liste_nulle[0:len(liste_nulle)-2]+'\n' #effacer la derniere virgule liste=liste+liste_nulle cp=cp+1 test_nulle=True liste=liste+('le nombre de sequences nulles est '+str(cp)) windows.resultat.setText(liste) windows.remplir_bt.clicked.connect ( createTab ) windows.bt_recherche.clicked.connect ( afficher_sequences_nulles ) windows.show() app.exec_() |
Exécution du programme
1) Remplissage du tableau
2) Recherche et affichage des séquences nulles
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