Une entreprise de télécommunication prévoit d installer plusieurs antennes dans une région afin d'améliorer la couverture réseau. Cette région est représentée par une matrice M de L lignes et C colonnes dont chaque case contient soit 1 soit :
- 1 : La zone est couverte par le réseau
- 0 : La zone n'est pas couverte
On appelle zone couverte isolée toute case contenant la valeur 1 et entourée sur ses quatre côtes (haut, bas, gauche et droite) uniquement par des cases contenant la valeur O. Les quatre cases situées aux coins diagonaux d'une case (haut gauche, haut-droite, bas-gauche et bas-droite) ne sont pas prises en compte pour déterminer si cette case est couverte isolée.
Pour les cases situées sur les bords de la matrice, tout côté inexistant est considéré comme une cave contenant la valeur 0.
- L'absence de liaison entre ces zones couvertes isolées el le reste du réseau pose problèmes. L'objectif est de les identifier afin d optimiser le plan de couverture.
Exemple : Pour la matrice M suivante

Les emplacements des zones couvertes isolées sont (0, 0) (0, 4) (2, 0) (2, 3) (3, 4) (4, 1) (5. 0)
Le nombre de ces zones est 7
Travail demandé :
1) Déclarer un type Mat pour la matrice M de L lignes el C colonnes (avec 2 <= L <= 100) et (2 <= C <=100) 2) Ecrire un algorithme d'une procédure Saisie(M , L , C) qui permet de saisir L et C puis de remplir la matrice M. tout en respectant les contraintes décrites précédemment 3) Ecrire un algorithme d'une procédure Zoneslsoloes(M , L , C) qui permet : - d'afficher les emplacements des zones couvertes isolées dans la matrice M - d'afficher le nombre total des zones couvertes isolées. - de remplir un fichier texte F avec les valeurs de la matrice M. de sorte que:
NB : La procédure doit assurer I ouverture et la fermeture du fichier texte situé sur la rac cc du disque D et dont le nom physique est "isoleee.txt".
Exemple : Pour le contenu de la matrice M précédent, le contenu du fichier F est

Dans cet algorithme, On va utiliser deux fonctions et cinq procédures :
- la fonction saisie_elt
- la procédure saisie
- la procédure afficher_fichier
- la procédure zones_isolees
Le programme principal coordonne l'exécution de toutes les fonctions du programme. Il permet successivement de saisir les dimensions de la matrice, de remplir ses éléments, de rechercher les zones isolées, puis d'afficher les résultats enregistrés dans le fichier de sortie.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Algorithme zones_couvertes Debut # Saisie des dimensions de la matrice Ecrire("Saisir les dimensions de la matrice") l <- saisie_elt(2, 100) c <- saisie_elt(2, 100) # Remplissage de la matrice saisie(m, l, c) # Recherche des zones isolées zones_isolees(m, l, c) # Affichage du contenu du fichier résultat afficher_fichier() Fin |
Déclaration des objets
| Objet | Type / Nature |
|---|---|
| l | entier |
| c | entier |
| m | matrice des entiers de l lignes et de c colonnes |
Le rôle de cette fonction est de saisir et de valider une valeur entière appartenant à un intervalle donné. Elle oblige l'utilisateur à entrer un entier compris entre les bornes inf et sup avant de poursuivre l'exécution du programme.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Fonction saisie__elt(inf:entier, sup:entier):entier # Demander à l'utilisateur de saisir une valeur Ecrire("donner " ,inf," <= n <= ",sup, " : ") Lire(n) # Répéter la saisie tant que la valeur est hors intervalle Tant que non (inf <= n <= sup) faire Ecrire("donner " ,inf," <= n <= ",sup, " : ") Lire(n) Fin tant que # Retourner la valeur valide retourner n Fin |
Déclaration des objets
| Objet | Type / Nature |
|---|---|
| n | entier |
Cette procédure a pour rôle de remplir une matrice avec des valeurs saisies par l'utilisateur. Chaque élément de la matrice est contrôlé afin de garantir qu'il est égal à 0 ou 1.
|
1 2 3 4 5 6 7 8 9 10 |
Procédure saisie(m:matrice, l:entier, c:entier) Ecrire("Remplir la matrice") # Parcourir toutes les cases de la matrice Pour i de 0 à l-1 faire Pour j de 0 à c-1 faire # Saisir la valeur de chaque case m[i][j] <- saisie_elt(0, 1) Fin pour Fin pour Fin |
Déclaration des objets
| Objet | Type / Nature |
|---|---|
| i | entier |
| j | entier |
Cette procédure permet d'ouvrir le fichier isolees.txt, de lire son contenu ligne par ligne, puis de l'afficher à l'écran avant de fermer le fichier. Elle offre ainsi à l'utilisateur une visualisation des résultats enregistrés sans avoir à ouvrir le fichier manuellement.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Procédure afficher_fichier() Ecrire("*** Contenu du fichier isolees.txt ***") # Ouvrir le fichier en lecture Ouvrir("isolees.txt", f , "r") # Lire la première ligne ligne <- Lire_ligne(f) # Lire toutes les lignes du fichier Tant que ligne != "": # Supprimer le caractère de fin de ligne ligne <- ligne.strip('\n') # Afficher la ligne Ecrire(ligne) # Lire la ligne suivante ligne <- Lire_ligne(f) Fin tant que # Fermer le fichier Fermer(f) Fin |
Déclaration des objets
| Objet | Type / Nature |
|---|---|
| f | fichier texte |
| ligne | chaîne des caractères |
Cette procédure crée le fichier Fidele.txt, y enregistre les matricules des abonnés fidèles saisis par l'utilisateur, à raison d'un matricule par ligne, puis ferme le fichier.
|
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 |
Procédure zones_isolees(m:matrice, l:entier, c:entier) # Compteur du nombre de zones isolées nbr_zones <- 0 # Ouverture du fichier en écriture Ouvrir("isolees.txt", f , "w") Ecrire("Les emplacements des zones couvertes isolées sont ", end="") # Parcours de toute la matrice Pour i de 0 à l-1 faire Pour j de 0 à c-1 faire # Vérifier si la case est une zone isolée Si (m[i][j]=1) et (m[i-1][j]=0) et (m[i+1][j]=0) et (m[i][j-1]=0) et (m[i][j+1]=0): # Écrire X dans le fichier Ecrire(f,"X ") # Afficher sa position Ecrire("(", i, ",", j, ")") # Incrémenter le compteur nbr_zones <- nbr_zones + 1 Sinon # Écrire la valeur normale dans le fichier Ecrire( f , m[i][j] + " ") Fin si Fin pour # Passage à la ligne suivante dans le fichier Ecrire(f,"\n") Fin pour # Fermer le fichier Fermer(f) # Afficher le nombre total de zones isolées Ecrire("Le nombre de ces zones est", nbr_zones) Fin |
Déclaration des objets
| Objet | Type / Nature |
|---|---|
| f | fichier texte |
| nbr_zones | entier |
| i | entier |
| j | chaîne des caractères |
|
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 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
from numpy import array # ========================================================== # Déclaration des constantes # ========================================================== # Nombre maximal de lignes et de colonnes de la matrice lignes = 100 colonnes = 100 # ========================================================== # Création d'une matrice de taille maximale # Initialisée avec des zéros # ========================================================== m = array([[int()] * colonnes] * lignes) # ========================================================== # Fonction permettant de saisir un entier compris # entre les bornes inf et sup # ========================================================== def saisie_elt(inf, sup): # Demander à l'utilisateur de saisir une valeur n = int(input("donner " +str(inf)+" <= n <= "+str(sup)+ " : ")) # Répéter la saisie tant que la valeur est hors intervalle while not (inf <= n <= sup): n = int(input("donner " +str(inf)+" <= n <= "+str(sup)+ " : ")) # Retourner la valeur valide return n # ========================================================== # Procédure de remplissage de la matrice # Les éléments saisis sont uniquement 0 ou 1 # ========================================================== def saisie(m, l, c): print("Remplir la matrice") # Parcourir toutes les cases de la matrice for i in range(l): for j in range(c): # Saisir la valeur de chaque case m[i][j] = saisie_elt(0, 1) # ========================================================== # Procédure d'affichage du contenu du fichier texte # ========================================================== def afficher_fichier(): print("*** Contenu du fichier isolees.txt ***") # Ouvrir le fichier en lecture f = open("isolees.txt", "r") # Lire la première ligne ligne = f.readline() # Lire toutes les lignes du fichier while ligne != "": # Supprimer le caractère de fin de ligne ligne = ligne.strip('\n') # Afficher la ligne print(ligne) # Lire la ligne suivante ligne = f.readline() # Fermer le fichier f.close() # ========================================================== # Procédure recherchant les zones couvertes isolées # Une zone est considérée isolée si sa valeur est 1 # et que ses quatre voisins (haut, bas, gauche, droite) # sont égaux à 0. # ========================================================== def zones_isolees(m, l, c): # Compteur du nombre de zones isolées nbr_zones = 0 # Ouverture du fichier en écriture f = open("isolees.txt", "w") print("Les emplacements des zones couvertes isolées sont ", end="") # Parcours de toute la matrice for i in range(l): for j in range(c): # Vérifier si la case est une zone isolée if (m[i][j] == 1 and m[i-1][j] == 0 and m[i+1][j] == 0 and m[i][j-1] == 0 and m[i][j+1] == 0): # Écrire X dans le fichier f.write("X ") # Afficher sa position print("(", i, ",", j, ")", end=" ") # Incrémenter le compteur nbr_zones += 1 else: # Écrire la valeur normale dans le fichier f.write(str(m[i][j]) + " ") # Passage à la ligne suivante dans le fichier f.write("\n") # Fermer le fichier f.close() # Afficher le nombre total de zones isolées print() print("Le nombre de ces zones est", nbr_zones) # ========================================================== # Programme principal # ========================================================== # Saisie des dimensions de la matrice print("Saisir les dimensions de la matrice") l = saisie_elt(2, 100) c = saisie_elt(2, 100) # Remplissage de la matrice saisie(m, l, c) # Recherche des zones isolées zones_isolees(m, l, c) # Affichage du contenu du fichier résultat afficher_fichier() |
Exécution du programme

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
Site robotique réalisé par Mohamed Ali Haj Salah - Prof Info