durée 3heures, documents autorisés
On désire créer une bibliothèque graphique en C++. On part d'une fenêtre (définie par sa taille et la position d'un coin, en pixels). Dans cette fenêtre, on représentera des objets (rectangles, cercles, segments, textes...). Tous ces objets ont certaines caractéristiques communes : coordonnées d'un coin, largeur, hauteur, couleur (entier positif). Le coin est normalement l'inférieur gauche; et dans ce cas largeur et hauteur sont positifs. Si c'est un coin supérieur, la hauteur sera négative, si c'est un coin droit, la largeur sera négative. Les autres caractéristiques, dépendant du type d'objet, ne sont pas à prendre en compte ici.
1.1 : définir la classe "caract" (caractéristiques communes), et la classe "fenetre"
1.2 : soit une fenêtre F et une instance de caract appelée C. Définir la méthode qui, lorsqu'on appelle C.inclus_dans(F), rend un code disant si C est totalement visible, totalement invisible, ou partiellement visible. Le code peut être un entier (0,1,2 par exemple), mais je préférerai un code précisant si l'objet est trop bas ou trop haut, trop à droite ou trop à gauche. L'information "partiellement visible" ne prend en compte que les caractéristiques communes, donc peut englober, pour certaines formes, des cas où elle peut néanmoins être visible ou cachée.
1.3 : dans le cas où l'objet à dessiner est un segment de droite (et uniquement dans ce cas) partiellement visible, écrivez une fonction permettant de retrouver les limites visibles du segment.
Dans cette partie, vous tenterez d'utiliser au mieux la notion d'objets
On désire faire un programme de validation de maillages. Celui-ci comportera deux grandes parties : une première partie purement géométrique et "calculatoire" (vérifier que tous les éléments sont correctement définis, qu'ils ne sont pas trop déformés, que les raccordements entre éléments se font bien au niveau des noeuds...), et une partie plus "intelligente", qui vérifiera plutôt la cohérence du maillage au vu de la forme de la pièce et de son chargement.
2.1 : pour la première partie, on hésite entre une programmation en C standard ou en C++. Qu'en pensez vous ?
2.2 : pour la seconde partie, on hésite entre un système expert (on dispose d'un moteur niveau 0+ ou 1) ou Prolog. Qu'en pensez vous ?
2.3 : supposons utiliser Prolog. On suppose que tous les noeuds du maillage sont numérotés. Chaque élément est défini par la liste de ses numéros de noeuds. Ecrivez une (ou plusieurs) règles qui permettent de dire si deux listes ont au moins un noeud commun (donc de même numéro).
2.4 : faire un programme en Prolog permettant de sélectionner le meilleur type d'éléments (ou au moins tous ceux qui sont possibles), sachant que :
Ces données sont bien évidement très simplifiées par rapport à la réalité.
L'utilisateur doit indiquer dans son but (Goal) les caractéristiques de son problème, le programme lui donnera les types d'éléments possibles.
Patrick TRAU, ULP - IPST 1/6/98