Chemins Matrice – Bac théorique – Section informatique – 2009

Bac Info 08-12-25
180 0

Sujet (Algo et programmation - Bac 2009)

Soit p et q deux entiers naturels tels que 5 :5_ p < q < 32. On se propose de remplir une matrice M à p lignes et q colonnes par des zéros (0) et des uns (1) de la façon suivante : On mettra 1 dans toute cellule M[i , j] si les représentations de i et de j dans la base 2 ont au moins une fois le chiffre 1 à la même position sinon on y mettra 0. On commencera à lire les positions à partir de la droite. Exemples M[5 , 3] aura la valeur 1 car les deux représentations binaires ont le chiffre 1 à la première position. En effet : 5 = (101)2 et 3 (11)2 M[9 , 4] aura la valeur 0 car les deux représentations binaires n'ont pas de 1 à la même place. En effet : 9 = (1001)2 et 4 = (100)2 On se propose ensuite de chercher tous les chemins rectilignes menant de la première ligne à la dernière ligne en n'empruntant que des cellules contenant des 1 et en sautant au maximum une seule cellule contenant 0. Par conséquent, un chemin rectiligne est une colonne ne comportant pas deux cellules consécutives contenant 0. Pour tout chemin trouvé, on affichera son numéro (l'indice j). En plus, les données relatives à ce problème seront enregistrées dans un fichier texte intitulé chemins.txt et placé sur la racine du disque D. Ce fichier comportera dans sa première ligne le naturel p suivi d'une espace, suivie du naturel q et comportera dans chacune des lignes qui suivent le numéro du chemin trouvé. La dernière ligne contiendra le nombre de chemins trouvés.

 

Solution Algorithmique

Dans cet algorithme, On va utiliser quatre fonctions et sept procédures :

- la fonction saisie()

- la fonction convertir_binaire()

- la fonction test_position1()

- la fonction test_cellule()

- la procédure remplir_matrice()

- la procédure afficher_matrice()

- la procédure remplir_fichier_chemin()

 

Algorithme du programme Principal

Déclaration des objets

Objet Type / Nature
p entier
q entier
m (matrice) tableau T de 32 lignes x 32 colonnes d’entiers.

 

La fonction saisir

La fonction saisie(inf, sup) sert à obliger l’utilisateur à entrer un nombre entier compris entre deux bornes :

inf : la borne inférieure (minimum autorisé)

sup : la borne supérieure (maximum autorisé)

Elle garantit que la valeur saisie est correcte.

La fonction demande d’abord à l’utilisateur d’entrer un entier dans l’intervalle [inf, sup].

Tant que l’utilisateur entre une valeur en dehors de l’intervalle, la fonction répète la saisie.

Dès qu’un nombre valide est fourni (inf ≤ n ≤ sup), la fonction le renvoie.

Déclaration des objets

Objet Type / Nature
n entier

 

La fonction convertir_binaire

La fonction convertir_binaire(n) sert à transformer un nombre entier positif en une chaîne représentant son écriture en binaire.

1- On initialise une chaîne vide qui contiendra le résultat binaire.

2- Tant que n > 0 :

- On calcule le reste de la division par 2 → c’est le prochain bit (0 ou 1).

- On ajoute ce bit au début de la chaîne binaire.

- On divise n par 2 (division entière).

3- Quand n atteint 0, la chaîne contient le nombre en binaire → on la retourne.

Déclaration des objets

Objet Type / Nature
binaire chaîne
reste chaîne

 

La fonction test_position1

Cette fonction sert à vérifier si deux nombres binaires (sous forme de chaînes) possèdent un bit ‘1’ aligné sur la même position en partant de la droite.

On commence à comparer les deux chaînes au dernier caractère (bit de poids faible).

1- Tant que : (ch1[pos1] == '0' ou ch2[pos2] == '0') et que l’on n’est pas encore au début des chaînes

on recule d’un pas (pos1 −= 1, pos2 −= 1).

2- Quand la boucle s’arrête, on vérifie : le bit actuel de ch1 est ‘1’ et le bit actuel de ch2 est ‘1’

3- Si les deux sont ‘1’, la fonction renvoie Vrai, sinon Faux.

Déclaration des objets

Objet Type / Nature
pos1 entier
pos2 entier

 

La fonction test_cellule

La fonction test_cellule sert à :

1. Convertir deux entiers i et j en binaire en utilisant la fonction convertir_binaire pour obtenir la représentation binaire de chacun des deux nombres.

2. Gérer le cas particulier du nombre 0 : si convertir_binaire renvoie une chaîne vide (ce qui arrive généralement lorsque le nombre vaut 0), la fonction remplace cette chaîne vide par "0" pour que le binaire soit correct.

3. Comparer les deux nombres binaires bit à bit

La fonction renvoie le résultat de test_position1(binaire_i, binaire_j).

Déclaration des objets

Objet Type / Nature
binaire_i chaîne
binaire_j chaîne

 

La procédure remplir_matrice

Cette procédure sert à remplir une matrice m de dimensions p × q en mettant dans chaque cellule 0 ou 1 suivant un test logique effectué par la fonction test_cellule(i, j).

1. Parcourir toute la matrice

Les deux boucles for permettent de parcourir toutes les lignes : i va de 0 à p-1 et toutes les colonnes : j va de 0 à q-1

2. Tester chaque couple (i, j)

Pour chaque cellule de coordonnées (i, j), la fonction appelle : test_cellule(i, j)

3. Remplir la matrice avec 0 ou 1 selon le résultat obtenu :

Si test_cellule(i, j) est vrai → la cellule prend la valeur 1

Sinon → la cellule prend la valeur 0

Déclaration des objets

Objet Type / Nature
i entier
j entier

 

La  procédure afficher_matrice

La procédure afficher_matrice sert à afficher le contenu de la matrice m de dimensions p × q sous forme de tableau bien structuré.

Déclaration des objets

Objet Type / Nature
i entier
j entier

 

La procédure remplir_fichier_chemin

Cette procédure analyse la matrice m (de taille p × q) colonne par colonne pour rechercher des chemins, et écrit les résultats dans un fichier texte nommé chemins.txt.

1. La procédure ouvre le fichier chemins.txt en écriture et commence par y inscrire p q pour indiquer les dimensions de la matrice.

2. Analyse colonne par colonne

Pour chaque colonne j :

a- Elle vérifie si cette chaîne ne contient pas "00"  en utilisant la fonction prédéfinie Pos(). Cela signifie qu’il n’y a aucun bloc de deux zéros consécutifs, donc la colonne est considérée comme un chemin valide.

b- Elle construit une chaîne ch constituée de tous les éléments de cette colonne, du haut vers le bas.

Si c’est un chemin valide : la colonne et sa chaîne binaire sont affichées, puis écrites dans le fichier texte.

3. Comptage des chemins

Un compteur (compteur_chemins) est incrémenté pour chaque colonne valide.

À la fin, le programme écrit dans le fichier le nombre des chemins

 

Déclaration des objets

Objet Type / Nature
f fichier du chemins.txt
i entier
j entier
ch chaîne
compteur_chemins entier

 

Solution en Python

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