Pensée computationnelle et programmation
Exercice 4 :
Une société de développement web se propose d’informatiser la gestion de ses projets, chaque projet
est caractérisé par :
Date Création : composée de 3 champs numériques :
Jour : entier
Mois : entier
Année : entier
Domaine : chaine de 15 caractères au maximum
Nombre des employés : qui travaillent sur ce projet
Chef projet : composée de 2 champs :
Nom : chaine de 15 caractères au maximum
Numéro de téléphone : chaine de 8 chiffres
L’application doit permettre :
La saisie de n projets (2 ≤ n ≤ 10).
L’affichage des domaines des projets dont le nombre des employés est inférieur à 22.
L’affichage des noms des chefs projet qui ont fait un projet dans l’année 2020.
Écrire un programme qui réalise ces différents traitements en respectant l’ordre mentionné dans
l’énoncé.
Enseignant : AHMED BELHASSEN 1
Pensée computationnelle et programmation
Solution :
Algorithme du programme principal :
Algorithme projets
Début
n saisir_taille ()
remplir_tableau (t,n)
Ecrire ("Les domaines des projets dont le nombre des employés est inférieur à 22 :")
afficher_domaines (t,n)
Ecrire ("Les noms des chefs projet qui ont fait un projet dans l’année 2020 :")
afficher_chef_projet (t,n)
Fin
Tableau de déclaration des nouveaux types
Types
date = Enregistrement
jour : entier
mois : entier
année : entier
Fin
chef = Enregistrement
nom : chaine de caractères
numéro_tel : chaine de caractères
Fin
projet = Enregistrement
date_création : date
domaine : chaine de caractères
nombre_employés : entier
chef_projet : chef
Fin
Tab = tableau de 10 projets
Enseignant : AHMED BELHASSEN 2
Pensée computationnelle et programmation
Tableau de déclaration des objets globaux (TDOG)
Objet Type/Nature
n Entier
t Tab
saisir_taille Fonction
remplir_tableau Procédure
afficher_domaines Procédure
afficher_chef_projet Procédure
Algorithme de la fonction saisir_taille :
Fonction saisir_taille () : entier
Début
Répéter
Ecrire ("Donner le nombre de projets (>= 2 et <= 10) : ")
Lire (x)
Jusqu’à (x >= 2) et (x <= 10)
Retourner x
Fin
Tableau de déclaration des objets locaux (TDOL)
Objet Type/Nature
x Entier
Algorithme de la procédure remplir_tableau :
Procédure remplir_tableau (@ ta : Tab, x : entier)
Début
Pour i de 0 à x-1 faire
Ecrire ("**** Projet num", i+1 ,"****")
Ecrire ("Date de création :")
Ecrire ("Jour : ")
Lire (ta [i].date_création.jour)
Ecrire ("Mois : ")
Lire (ta [i].date_création.mois)
Ecrire ("Année : ")
Lire (ta [i].date_création.année)
Répéter
Ecrire ("Domaine : ")
Lire (ta [i].domaine)
Jusqu’à (vérifier (ta [i].domaine)) et (long (ta [i].nom) <= 15)
Enseignant : AHMED BELHASSEN 3
Pensée computationnelle et programmation
Ecrire ("Nombre des employés : ")
Lire (ta [i].nombre_employés)
Répéter
Ecrire ("Nom : ")
Lire (ta [i].chef_projet.nom)
Jusqu’à (vérifier (ta [i].chef_projet.nom)) et (long (ta [i].chef_projet.nom) <= 15)
Répéter
Ecrire ("Numéro de téléphone : ")
Lire (ta [i].chef_projet.numéro_tel)
Jusqu’à (estnum (ta [i].chef_projet.numéro_tel)) et (long (ta [i].chef_projet.numéro_tel) = 8)
Fin pour
Fin
Tableau de déclaration des objets locaux (TDOL)
Objet Type/Nature
i Entier
vérifier Fonction
Algorithme de la fonction vérifier :
Fonction vérifier (ch : chaine de caractères) : booléen
Début
Si (long (ch) > 0) alors
Pour i de 0 à long (ch)-1 faire
Si (((ch [i] < "A") ou (ch [i] > "Z")) et ((ch [i] < "a") ou (ch [i] > "z"))) et (ch [i] ≠ " ") alors
Retourner Faux
Fin si
Fin pour
Retourner Vrai
Sinon
Retourner Faux
Fin si
Fin
Tableau de déclaration des objets locaux (TDOL)
Objet Type/Nature
i Entier
Enseignant : AHMED BELHASSEN 4
Pensée computationnelle et programmation
Algorithme de la procédure afficher_domaines :
Procédure afficher_domaines (ta : Tab, x : entier)
Début
Pour i de 0 à x-1 faire
Si (ta [i].nombre_employés < 22) alors
Ecrire (ta [i].domaine)
Fin si
Fin pour
Fin
Tableau de déclaration des objets locaux (TDOL)
Objet Type/Nature
i Entier
Algorithme de la procédure afficher_chef_projet :
Procédure afficher_chef_projet (ta : Tab, x : entier)
Début
Pour i de 0 à x-1 faire
Si (ta [i].date_création.année = 2020) alors
Ecrire (ta [i].chef_projet.nom)
Fin si
Fin pour
Fin
Tableau de déclaration des objets locaux (TDOL)
Objet Type/Nature
i Entier
Enseignant : AHMED BELHASSEN 5
Pensée computationnelle et programmation
Programme en python :
Version dictionnaire :
from numpy import*
def vérifier (ch) :
if (len (ch) > 0) :
for i in range (len (ch)) :
if ((ch [i] < "A") or (ch [i] > "Z")) and ((ch [i] < "a") or (ch [i] > "z")) and (ch [i] !=" ") :
return False
return True
else :
return False
def saisir_taille () :
x=0
while (x < 2) or (x > 9) :
x = int (input ("Donner le nombre de projets (>= 2 et <= 10) : "))
return x
def remplir_tableau (ta,x) :
for i in range (x) :
ta [i] = {}
print ("**** Projet num", i+1 ,"****")
print ("Date de création :")
ta [i]["date_création"] = {}
ta [i]["date_création"]["jour"] = int (input ("Jour : "))
ta [i]["date_création"]["mois"] = int (input ("Mois : "))
ta [i]["date_création"]["année"] = int (input ("Année : "))
ta [i]["domaine"] = ""
while not (vérifier (ta [i]["domaine"])) or (len (ta [i]["domaine"]) > 15) :
ta [i]["domaine"] = input ("Domaine : ")
ta [i]["nombre_employés"] = int (input ("Nombre des employés : "))
print ("Chef projet :")
ta [i]["chef_projet"] ={}
ta [i]["chef_projet"]["nom"] = ""
while not (vérifier (ta [i]["chef_projet"]["nom"])) or (len (ta [i]["chef_projet"]["nom"]) > 15) :
ta [i]["chef_projet"]["nom"] = input ("Nom : ")
Enseignant : AHMED BELHASSEN 6
Pensée computationnelle et programmation
ta [i]["chef_projet"]["numéro_tel"] = ""
while not (ta [i]["chef_projet"]["numéro_tel"].isdigit ()) or (len (ta
[i]["chef_projet"]["numéro_tel"] ) != 8) :
ta [i]["chef_projet"]["numéro_tel"] = input ("Numéro de téléphone : ")
def afficher_domaines (ta,x) :
for i in range (x) :
if (ta [i]["nombre_employés"] < 22) :
print (ta [i]["domaine"])
def afficher_chef_projet (ta,x) :
for i in range (x) :
if (ta [i]["date_création"]["année"] == 2020) :
print (ta [i]["chef_projet"]["nom"])
#programme principal
n = saisir_taille ()
t = array ([{}] * n)
remplir_tableau (t,n)
print ("Les domaines des projets dont le nombre des employés est inférieur à 22 :")
afficher_domaines (t,n)
print ("Les noms des chefs projet qui ont fait un projet dans l’année 2020 :")
afficher_chef_projet (t,n)
Enseignant : AHMED BELHASSEN 7
Pensée computationnelle et programmation
Version classe :
from numpy import*
class date :
jour = 0
mois = 0
année = 0
class chef :
nom = ""
numéro_tel = ""
class projet :
date_création = date ()
domaine = ""
nombre_employés = 0
chef_projet = chef ()
def vérifier (ch) :
if (len (ch) > 0) :
for i in range (len (ch)) :
if ((ch [i] < "A") or (ch [i] > "Z")) and ((ch [i] < "a") or (ch [i] > "z")) and (ch [i] !=" ") :
return False
return True
else :
return False
def saisir_taille () :
x=0
while (x < 2) or (x > 10) :
x = int (input ("Donner le nombre de projets (>= 2 et <= 10) : "))
return x
def remplir_tableau (ta,x) :
for i in range (x) :
ta [i] = projet ()
print ("**** Projet num", i+1 ,"****")
print ("Date de création :")
ta [i].date_création = date ()
ta [i].date_création.jour = int (input ("Jour : "))
Enseignant : AHMED BELHASSEN 8
Pensée computationnelle et programmation
ta [i].date_création.mois = int (input ("Mois : "))
ta [i].date_création.année = int (input ("Année : "))
ta [i].domaine = ""
while not (vérifier (ta [i].domaine)) or (len (ta [i].domaine) > 15) :
ta [i].domaine = input ("Domaine : ")
ta [i].nombre_employés = int (input ("Nombre des employés : "))
print ("Chef projet :")
ta [i].chef_projet = chef ()
ta [i].chef_projet.nom = ""
while not (vérifier (ta [i].chef_projet.nom)) or (len (ta [i].chef_projet.nom) > 15) :
ta [i].chef_projet.nom = input ("Nom : ")
ta [i].chef_projet.numéro_tel = ""
while not (ta [i].chef_projet.numéro_tel.isdigit ()) or (len (ta [i].chef_projet.numéro_tel ) != 8) :
ta [i].chef_projet.numéro_tel = input ("Numéro de téléphone : ")
def afficher_domaines (ta,x) :
for i in range (x) :
if (ta [i].nombre_employés < 22) :
print (ta [i].domaine)
def afficher_chef_projet (ta,x) :
for i in range (x) :
if (ta [i].date_création.année == 2020) :
print (ta [i].chef_projet.nom)
#programme principal
n = saisir_taille ()
t = empty (n , projet)
# t = array ([projet] * n)
remplir_tableau (t,n)
print ("Les domaines des projets dont le nombre des employés est inférieur à 22 :")
afficher_domaines (t,n)
print ("Les noms des chefs projet qui ont fait un projet dans l’année 2020 :")
afficher_chef_projet (t,n)
Enseignant : AHMED BELHASSEN 9