Vous êtes sur la page 1sur 7

Année universitaire : 2019/2020

Département d’informatique Trimestre 1


Master GLP
Programmation Python
TP n°2
Problème I : Fractions

Toutes les fractions considérées dans cet exercice ont un numérateur entier naturel et un
dénominateur entier naturel non nul. Une fraction est représentée par une liste dont le
premier élément est le numérateur de la fraction et dont le second élément est le
dénominateur de la fraction.
Manipulations simples sur les fractions

Question 1.1
Écrire en langage Python la fonction num qui, étant donnée une fraction, renvoie le
numérateur de cette fraction.
Écrire en langage Python la fonction den qui, étant donnée une fraction, renvoie le
dénominateur de cette fraction.
Question 1.2
Écrire en langage Python la fonction F-egal ? qui, étant données deux fractions, renvoie
la valeur vraie si et seulement si ces deux fractions sont égales.
Question 1.3
Écrire en langage Python la fonction F-inf ? qui, étant données deux fractions r1et r2, renvoie
la valeur vraie si et seulement si r1< r2
Question 1.4
La fraction (a+c)/(b+d)est appelée fraction médiane des fractions a/b et c/d.
Écrire en langage Python la fonction F-mediane qui, étant données deux fractions,
renvoie la fraction médiane de ces deux fractions.
Question 1.5
Écrire en langage Python la fonction pgcd qui, étant donnés deux entiers naturels a et b non
simultanément nuls, renvoie le plus grand entier naturel qui divise à la fois a et b.
Question 1.6
On rappelle qu’une fraction a/b est irréductible si et seulement si a et b ont un seul diviseur
commun, qui est égal à 1.

Écrire l en langage Python la fonction F-irred ? qui, étant donnée une fraction, renvoie la
valeur vraie si et seulement si cette fraction est irréductible.
Listes de fractions

Page: 1/7
Question 1.7
Écrire en langage Python la fonction LF-irreds ? qui, étant donnée une liste de fractions,
renvoie la valeur vraie si et seulement si toutes les fractions de la liste sont irréductibles. Elle
renvoie la valeur vraie si la liste est vide.
Question 1.8
Écrire en langage Python la fonction LF-croiss ?qui, étant donnée une liste de fractions,
renvoie la valeur vraie si et seulement si la liste de fractions est strictement croissante. Elle
renvoie la valeur vraie si la liste est vide ou n’a qu’un élément.
Question 1.9
Écrire en langage Python la fonction LF-medianes qui, étant donnée une liste non vide de
fractions L, renvoie la liste obtenue en intercalant entre chaque paire de fractions consécutives
de L leur fraction médiane. La fonction LF-medianes renvoie la liste L si L n’a qu’un élément.
Par exemple :
LF-medianes( [[0, 1], [1, 2), [2 ,3] ,[1, 1]])donne [[0, 1],[1 ,3],[1 ,2],[3 ,5],[2, 3],[3, 4],[1, 1]]
LF-medianes ([2 ,3]) donne [2 ,3]
Suite des séquences de Farey

Pour construire la suite des séquences de Farey, nous partons de la séquence initiale :
s0= [[0,1],[1,1]]
puis, entre ces deux fractions, nous plaçons leur fraction médiane, ce qui donne :
s1= [[0,1],[1,2],[1,1]]
De nouveau, nous intercalons, entre deux fractions successives, leur fraction médiane. Nous
obte-nons les séquences suivantes :
s2= [[0,1],[13],[1,2],[2,3],[1,1]]
s3= [[0,1],[1,4],[1,3],[2,5],[1,2],[3,5],[2,3],[3,4],[1,1]]...
sn est obtenue partir de sn- intercalant, entre deux fractions successives, leur fraction
médiane ; la séquence sn est appelée séquence de Farey d’indice n.
Les séquences de Farey possèdent des propriétés remarquables :
– dans chaque séquence sn les fractions sont irréductibles ;
– dans chaque séquence sn les fractions sont rangées en ordre strictement croissant ;
– pour chaque nombre rationnel r compris entre 0 et 1, il existe une séquence sn qui contient
une fraction égale à r.
Question 1.10
Écrire la signature et une définition de la fonction farey qui, étant donné un entier naturel n,
renvoie la séquence de Farey d’indice n. Par exemple :
farey( 0) donne [[0,1],[1,1]]
farey (3)donne [[0,1],[1,4],[1,3],[2,5],[1,2],[3,5],[2,3],[3,4],[1,1]]

Page: 2/7
Question 1.11
Écrire en langage Python un script (lignes de code) testant que, dans la séquence de Farey
d’indice 1000000, toutes les fractions sont irréductibles et sont rangées en ordre croissant.
Question 1.12
On suppose que l’on dispose d’une fonction farey-ind qui, étant donnée une fractionr comprise
entre 0 et 1, renvoie l’indice de la première séquence de Farey dans laquelle apparaît une
fraction égale à r. Écrire en langage Python la fonction farey-seq qui, étant donnée une
fraction r comprise entre 0 et 1, renvoie la première séquence de Farey dans laquelle apparaît
une fraction égale à r.
Question 1.13
Écrire en langage Python la fonction farey-ind de spécification :
-Résultat : entier naturel,
-Rôle : renvoie l’indice de la première séquence de Farey dans laquelle apparaît une fraction
égale à r
Indication :on pourra définir une fonction interne, disons aux, qui, étant données trois
fractions r, r1 et r2 telles que r1 <=r<=r2, renvoie le nombre de calculs de fractions médianes
nécessaires pour aboutir à une fraction égale à r, en partant des fractions r1 et r2.

Problème 2 - Polygone simple


Dans toute cette partie, le plan est muni d’un repère orthonormé fixé. On identifiera un
vecteur et le couple de ses coordonnées dans ce repère.

On dispose des types point, vecteurs, segment. Un point est défini par deux entiers, un
segment (ou un vecteur) est défini par deux points et un polygone est un ensemble (tableau)
de points.

Remarque : dans tout le problème un segment, resp. Un polygone, est toujours supposé formé
de points distincts.

1- Définir en langage Python les classes point, vecteur, segment ?


A - Intersection

Remarque : géométriquement, le segment [a, b] est l’ensemble des points de la droite situés
entre a et b; on rappelle que les segments considérés sont non réduits à un point.

A.1) Écrire en langage Python des fonctions determinant et produit_scalaire telles que
determinant(u,v) retourne le déterminant de la matrice formée par les vecteurs u et v , et
produit_scalaire(u,v) retourne le produit scalaire des vecteurs u et v.

A.2) Définition : étant donnés trois points, a, b, c le triangle (a, b, c)est

Page: 3/7
direct si une mesure de l’angle( ab , ac ) est dans l’intervalle]0, π [ , indirect si une mesure de

l’angle( ab , ac ) est dans l’intervalle]-π,0 [ , aplati si les trois points a, b et c sont alignés.

On a le triangle (a, b, c) est direct si et seulement si det( ab , ac ) >0.

 Écrire en langage Python une fonction direct telle que direct(a,b,c) retourne 1 si le triangle
(a, b, c) est direct, -1 s’il est indirect et 0 s’il est aplati.
A.3) Écrire en langage Python une fonction meme_cote telle que meme_cote(I,p,q ) retourne 1
si les points p et q sont du même côté de la droite D portée par le segment I,-1 s’ils ne sont
pas du même côté, et 0 si p ou q est sur D.

 Illustrer la démarche à l’aide de figures bien choisies.


A.4) Écrire en langage Python, en la justifiant, une fonction appartient telle que
appartient(I,p) retourne 1 si le point p appartient au segment I et -1 sinon.

A.5) Écrire en langage Python une fonction intersecte telle que intersecte(I,J) retourne 1 si
les segments I et J ont une intersection non vide et -1 sinon.

 Utiliser et justifier à l’aide de figures le fait que, sauf cas particuliers à expliciter,I et J ont
une intersection non vide lorsque les extrémités de I ne sont pas du même côté de J et
que conjointement les extrémités de J ne sont pas du même côté de I .
B - Intérieur / Extérieur

Dans cette partie, n est un entier strictement supérieur à 2,P=p1p2..pn est un polygone ;
les points p1,p2,..,pn sont les sommets du polygone ; les segments [p1,p2],…, [pn-1,pn] en sont
les arêtes. Par convention on pose p0=pn

et pi+kn=pi pour tout entier naturel k.

Géométriquement, un polygone est, par définition, l’ensemble des points de ses arêtes ;
ainsi on dit qu’un point a est sur le polygone P s’il appartient à l’une de ses arêtes. On dit
qu’un segment S coupe le polygone P si ce segment à une intersection non vide avec l’une des
arêtes de P.

De plus, dans ce problème, le polygone P sera toujours supposé simple, ce qui signifie que
deux arêtes quelconques non consécutives sont toujours disjointes et que deux arêtes
consécutives ont un seul point commun.

Résultat admis 1. Un polygone simple P sépare le plan en deux composantes


connexes, ce qui signifie que le complémentaire de P dans le plan comporte deux
composantes connexes : l’intérieur de P est par définition la composante connexe
bornée et l’autre, non bornée, est l’extérieur de P.

Page: 4/7
Résultat admis 2. Soient P un polygone simple, a et b deux points du plan qui
ne sont pas sur P. Si le segment [a, b] ne coupe pas p alors a et b sont dans la même
composante connexe.

Résultat admis 3. Soient P un polygone simple, a et b deux points du plan qui


ne sont pas sur p. Si le segment [a, b] coupe P en un seul point qui n’est pas un
sommet de p, alors a et b ne sont pas dans la même composante connexe.

B.1) Écrire en langage Python une fonction simplifie telle que simplifie(P) supprime du
Polygone P les points pi tels que pi-1, pi, pi+1 sont alignés.

Dans la suite, le polygone P sera supposé sous sa forme simplifiée, il n’existe pas de sommet pi
tel que pi-1, pi, pi+1 sont alignés.

Problème 3– Intervalle

Nous nous limiterons à des intervalles fermés de IR dont les bornes sont des entiers
[min,max].

Définitions :

Déf.I (Intervalles disjoint) Deux intervalles sont disjoint si leur intersection est
vide.

Déf.II (Fusion d’intervalles) La fusion de deux intervalles a comme minimum le


plus petit des minima des deux intervalles, et comme maximum le plus grand des
maxima des deux intervalles. Cette opération correspond à l’union des intervalles si
ceux-ci ne sont pas disjoints.

Un intervalle est représenté par le type interval

1. Définir en langage Python la classe interval ?


2. Ecrire en langage Python une fonction disjoint, telle que l’appel disjoint(I,J) renvoie la
valeur vrai si les intervalles I et J sont disjoint, et la valeur faux sinon ?
3. Ecrire en langage Python une fonction fusion, telle que l’appel fusion(I,J) renvoie un
intervalle correspondant à la fusion de I et J ?
listes triés d’intervalles

La réalisation la plus simple d’un ensemble de valeurs en utilisant des intervalles consiste à
utiliser un tableau d’intervalles, on utilisera des listes triées d’intervalles d’entiers.

Déf.III (Tableau bien formé d’intervalles) Un tableau (liste) bien formé d’intervalles est un
tableau d’intervalles qui respecte les contraintes suivantes :

- Les intervalles sont bien formés.


Page: 5/7
- Les intervalles sont disjoints deux à deux.
- Un tableau est trié selon la relation d’ordre suivante : un intervalle i est strictement
plus petit qu’un intervalle j si et seulement si le maximum de i est strictement plus
petit que le maximum de j.
4. Ecrire en langage Python une fonction appartenir, telle que l’appel appartenir(e, T[ ], n) sur
un tableau bien formé d’intervalles T renvoie vrai si l’entier e appartient à un des n
intervalles de T et la valeur faux sinon ?
Ecrire en langage Python une fonction verifier, telle que l’appel de cette fonction sur un
tableau T de n intervalles renvoie la valeur vrai si le tableau T respecte les contraintes d’un
tableau bien formé, et la valeur faux sinon ?

Exercice1 :
On en profitera pour se familiariser avec la notion de File.
Une File est une structure de données (liste) basée sur le principe du premier arrivé, premier
sorti (FIFO =) First In, First Out). En d'autre terme, le premier élément ajouté à la pile sera le
premier élément à être récupérer.
1) Ecrire une classe implantant une File d'éléments. On considère qu'un élément de file
encapsule une valeur entière. Définir le constructeur et les accesseurs de cette classe
(méthode d’accès aux champs).
2) Comment représenter la file vide ?
3) Définir la classe File. Le constructeur de cette classe construira la file vide.
4) Définir une méthode permettant de tester si une file est vide.
5) Définir la méthode emfile(ajoute un élément à la file)
6) Définir la méthode defile (retourne le 1er élément et le retire de la file)
7) Définir la méthode tête (retourne le 1er élément de la file sans le retirer)
8) Définir dans la classe File la méthode affiche qui affiche le contenu d'une file, sans la
modifier.
9) Tester la création d'une file et sa manipulation en ajoutant et en supprimant divers
éléments...

Exercice 2: Deque •

 Deque,une double-ended queue (abrégé deque et prononcé « deck ») est une


structure de données qui réalise une file pour laquelle les éléments peuvent être
ajoutés au début et en fin. • Elle est souvent appelée head-tail linked list.
 Deque : opérations
 D.front() : renvoie le premier •
 D.pushFront(elt) : ajoute au début •
 D.popFront() : supprime le premier •
Page: 6/7
 D.back() : renvoie le dernier •
 D.pushBack(elt) : ajoute en fin •
 D.popBack() : supprime le dernier •
 D.estVide() : – Renvoie vrai si la deque est vide et faux sinon (empty).
Implémenter sa classe ?

Exercices3 :
1)
 Écrire en langage python une fonction min_et_ind(l) qui renvoie un couple contenant
le minimum de l et l’indice de sa première occurrence.
Min_et_ind([4,5,6,2,5,3,2] = (2,3)
 Écrire en langage python une fonction occs_min(l) qui renvoie la liste des
occurrences du minimum de l. occs_min([4,5,6,2,5,3,2] = [3,6]

2) Les caractères du dictionnaire :

 Créer le dictionnaire des fréquences des lettres contenues dans votre nom et
prenom.
 Choisir 5 mots de la langue française et créer un dictionnaire qui associe à chacun
de ces mots sa traduction en anglais
 Ajouter une entrée au dictionnaire de la question précédente (un nouveau mot et sa
définition).
 Écrire en langage python une fonction ajoute(mot1, mot2, d)qui prend en argument
un mot en français, sa traduction en anglais et ajoute ces deux mots dans le
dictionnaire d uniquement si mot1 n’est pas une clé du dictionnaire (si mot1
apparaît dans d la fonction ne fait rien).
 Écrire en langage python une fonction qui affiche à l’écran toutes les valeurs
correspondant aux clés qui sont dans votre dictionnaire (ici, tous les mots en anglais
qui apparaissent dans votre dictionnaire).
 Écrire en langage python une fonction delete(char, dict) qui prend en argument un
caractère char et un Dictionnaire dict et supprime du dictionnaire toutes les entrées
correspondant à des clés qui commencent par la lettre char.

Page: 7/7

Vous aimerez peut-être aussi