Matrice – Bac pratique – Section informatique – 2013

Bac Info 29-12-25
33 0

Sujet (Algo et programmation - Bac 2013)

On se propose de chercher dans une matrice M, les plus longues séquences d'éléments juxtaposés dont la somme est égale à zéro, en procédant comme suit :

remplir une matrice M de dimension LxC (avec 2 < L < 24 et 2 < C < 24) par des entiers non nuls.
chercher, pour chaque ligne, toutes les séquences d'éléments juxtaposés dont la somme est égale à 0 et les stocker dans un tableau d'enregistrements T. Chaque enregistrement contient trois champs : le numéro de la ligne (Ni), l'indice de la colonne représentant le début de la séquence (ICD) et l'indice de la colonne représentant la fin de la séquence (ICF).
stocker dans un fichier texte intitulé "Long_Seq.txt" :
1- dans la première ligne, le nombre d'éléments de la plus longue séquence.
2- toutes les plus longues séquences d'éléments. Chacune sera représentée, dans une ligne à part, par les valeurs de NL, ICD et ICF, séparés par le caractère "#".

Exemple:

Pour la matrice M de dimension 5x6 suivante :

Dans la lère ligne, il y a 2 séquences d'éléments juxtaposés dont la somme est égale à 0 :

- La séquence ayant comme ICD la valeur 1 et comme ICF la valeur 5.

- La séquence ayant comme ICD la valeur 3 et comme ICF la valeur 6.

Dans la 2ème ligne, il y a une seule séquence d'éléments juxtaposés dont la somme est égale à 0, la séquence ayant comme ICD la valeur 1 et comme ICF la valeur 4.

Dans la 3eme ligne, il y a une seule séquence d'éléments juxtaposés dont la somme est égale à 0, la séquence ayant comme ICD la valeur 2 et comme ICF la valeur 6.

Dans la 4eme ligne, il n'y a aucune séquence d'éléments juxtaposés dont la somme est égale à O.

Dans la Sème ligne, il y a une seule séquence d'éléments juxtaposés dont la somme est égale à 0, la séquence ayant comme ICD la valeur 1 et comme ICF la valeur.

Travail demandé

Ecrire un programme en Python intitulé Sequence qui permet, à partir d'une matrice M de dimension LxC, de remplir un tableau T et de créer un fichier "Long_Seq.txt", comme décrit précédemment.

 

 

Solution Algorithmique

Dans cet algorithme, On va utiliser trois fonctions et cinq procédures:

- la fonction saisie()

- la fonction saisie_element()

- la procédure remplir_matrice()

- la procédure afficher_matrice()

- la fonction verif_juxtapose()

- la procédure remplir_tableau()

- la procédure afficher_tableau()

- la procédure remplir_fichier_long_seq()

 

Algorithme du programme Principal

Déclaration des objets

Objet Type / Nature
l entier
c entier
m matrice
t tableau

 

La fonction saisie

La fonction saisie(inf, sup) permet de demander à l’utilisateur de saisir un entier strictement compris entre deux bornes inf et sup.

Plus précisément :

- La fonction affiche un message demandant un entier n tel que inf < n < sup. - Si la valeur saisie n’est pas dans l’intervalle ouvert ]inf, sup[, la saisie est redemandée. - La saisie est répétée tant que la condition n’est pas respectée. - Lorsque l’utilisateur entre enfin une valeur correcte, la fonction retourne cet entier.

Déclaration des objets

Objet Type / Nature
n entier

 

La fonction saisie_element

La fonction saisie_element() a pour rôle est de demander à l’utilisateur de saisir un entier non nul.

Plus précisément :

La fonction demande une première fois à l’utilisateur de saisir un entier.

Si l’utilisateur saisit 0, la saisie est refusée.

Tant que la valeur saisie est égale à 0, la fonction redemande une nouvelle saisie.

Dès que l’utilisateur saisit un entier différent de 0, la fonction retourne cette valeur.

Déclaration des objets

Objet Type / Nature
n entier

 

La procédure remplir_matrice 

Cette procédure remplir_matrice(m, l, c) a pour rôle de remplir une matrice m de dimensions l × c avec des entiers non nuls saisis par l’utilisateur.

Détail du fonctionnement :

Elle affiche un message indiquant le début du remplissage de la matrice.

Elle parcourt la matrice ligne par ligne (i de 0 à l-1).

Pour chaque ligne, elle parcourt les colonnes (j de 0 à c-1).

À chaque position m[i][j], elle appelle la fonction saisie_element() afin de saisir un entier différent de zéro.

La valeur saisie est stockée dans la matrice à la position correspondante.

Déclaration des objets

Objet Type / Nature
i entier
j entier

 

La procédure afficher_matrice 

Cette procédure afficher_matrice(m, l, c) a pour rôle d’afficher le contenu de la matrice M de dimensions l × c.

Détail du fonctionnement :

Elle affiche un message indiquant l’affichage de la matrice.

Elle parcourt la matrice ligne par ligne à l’aide de la boucle sur i.

Pour chaque ligne, elle parcourt les colonnes avec la boucle sur j.

Chaque élément m[i][j] est affiché sur la même ligne, séparé par un espace.

Après l’affichage de chaque ligne, un retour à la ligne est effectué avec Ecrire().

Déclaration des objets

Objet Type / Nature
i entier
j entier

 

La fonction verif_juxtapose()

Cette fonction verif_juxtapose(m, numero_ligne, numero_colonne, c) a pour rôle de vérifier s’il existe, sur une ligne donnée de la matrice m, une séquence de valeurs consécutives (juxtaposées) dont la somme est égale à 0.

Détail du fonctionnement :

La fonction commence par initialiser la somme s avec la valeur située à la position (numero_ligne, numero_colonne).

Elle utilise l’indice i pour parcourir les colonnes à partir de numero_colonne.

Tant que la somme s n’est pas nulle et que l’on ne dépasse pas la dernière colonne (i < c - 1), elle ajoute successivement les éléments voisins situés à droite. À chaque itération, l’élément suivant de la ligne est ajouté à la somme. Si, au cours de ce parcours, la somme devient égale à 0, la fonction retourne l’indice de la colonne où la séquence se termine. Si aucune séquence de valeurs juxtaposées de somme nulle n’est trouvée, la fonction retourne -1.

Déclaration des objets

Objet Type / Nature
s entier
i entier

 

La procédure remplir_tableau

Cette procédure remplir_tableau(t, m, l, c) a pour rôle de détecter toutes les séquences de valeurs juxtaposées de somme nulle dans la matrice m et de stocker leurs caractéristiques dans le tableau T.

Détail du fonctionnement :

La procédure parcourt toutes les lignes de la matrice (i de 0 à l-1).

Pour chaque ligne, elle parcourt les colonnes possibles de départ (j de 0 à c-2).

À chaque position (i, j), elle appelle la fonction verif_juxtapose pour vérifier s’il existe une séquence contiguë sur la ligne i dont la somme est égale à 0.

Si une séquence est trouvée un dictionnaire sequence_juxtapose est créé pour mémoriser :

- nl : le numéro de la ligne,

- icd : l’indice de la colonne de début,

- icf : l’indice de la colonne de fin.

Ces informations sont ensuite renseignées à partir des valeurs calculées.

La procédure met à jour la longueur maximale de séquence trouvée (max_sequence).

Chaque séquence détectée est ajoutée au tableau T à la position longueur_tableau.

Le compteur longueur_tableau est ensuite incrémenté.

Déclaration des objets

Objet Type / Nature
i entier
j entier
sequence_juxtapose Enregistrement
longueur_tableau entier (variable globale)
sequence_juxtapose entier (variable globale)

 

La procédure afficher_tableau

Cette procédure afficher_tableau(t, index) a pour rôle d’afficher le contenu du tableau T, qui stocke les informations sur les séquences juxtaposées trouvées dans la matrice.

Détail du fonctionnement :

Elle affiche un message indiquant l’affichage du tableau T.

Elle parcourt le tableau T de l’indice 0 jusqu’à index - 1.

Pour chaque élément du tableau des enregistrements, elle affiche : le numéro de la ligne, l’indice de la colonne de début de la séquence, et  l’indice de la colonne de fin de la séquence.

Les valeurs sont affichées sur une même ligne pour chaque séquence.

Déclaration des objets

Objet Type / Nature
i entier

La procédure remplir_fichier_long_seq

Cette procédure remplir_fichier_long_seq(t, longueur_tableau, max_sequence) a pour rôle de créer et remplir le fichier texte Long_Seq.txt avec les informations relatives aux plus longues séquences d’éléments juxtaposés dont la somme est égale à zéro.

Détail du fonctionnement :

Elle ouvre (ou crée) le fichier Long_Seq.txt en mode écriture.

Elle écrit dans la première ligne du fichier le nombre d’éléments de la plus longue séquence trouvée.

Elle parcourt ensuite le tableau T, qui contient toutes les séquences détectées.

Pour chaque séquence, elle calcule sa longueur à partir des indices de début (icd) et de fin (icf).

Si la longueur de la séquence correspond à la longueur maximale (max_sequence), ses informations sont :

affichées à l’écran,

enregistrées dans le fichier sous la forme : NL#ICD#ICF.

Enfin, le fichier est fermé correctement.

Déclaration des objets

Objet Type / Nature
f fichier
i entier

 

Solution en Python

Exécution du programme

0 commentaire

laisser un commentaire

Veuillez noter s'il vous plaît*

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Passion de robotique

Atelier robotique

Construction des robots

Bras robotique

Maison intelligente

But de ce site web

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.

Coordonnées

Zaouiet Kontech-Jemmel-Monastir-Tunisie

+216 92 886 231

medaliprof@gmail.com

Photos des articles

Site robotique réalisé par Mohamed Ali Haj Salah - Prof Info