Codage et Représentation de l’information, année 2019
Rappel
Les TD sont à rendre via Moodle avant vendredi soir, minuit. Tout TD non rendu entraîne un 0 immédiatement.
Ces TDs sont à réaliser sous linux. Il faut donc
allumer (ou redémarrer) votre machine de TP et la faire redémarrer sous
Linux. Les TDs sont à retourner via Moodle sous forme
d’une archive tar.gz
.
Vous devez faire le maximum du TP dans le terminal, la liste des commandes tapées seront accessibles pour les correcteurs (si tout se passe bien).
Les questions avec des (*
) sont facultatives et bien
plus difficiles. Le nombre d’étoiles indique la difficulté de la
question.
À tout moment vous pouvez consulter le manuel d’une commande en
tapant man nom_de_commande
.
Préparation du dossier TD7
Créez un dossier
TD7
dans votre dossierCRI
, ainsi qu’un fichierréponses
Ajoutez votre nom et la date du jour dans le dossier
réponses
en ligne de commande uniquement.
Rappel d’utilisation de Python
Dans la suite, tous les scripts sont à écrire avec un éditeur comme
atom
et à enregistrer dans un fichier avec une extension
.py
dans le répertoire TD7
. Pour lancer votre
script enregistré dans un fichier pgm.py
exécutez la
commande
python3 pgm.py
Remarque Vous n’êtes pas obligés d’utiliser la
commande touch
pour créer un nouveau fichier pour un
script. Si vous le désirez, vous pouvez utiliser atom
pour
créer de nouveaux fichiers.
- Suites et fonctions
Dans le fichier exo1.py
écrire pour chacune des suites
suivantes une fonction appelée fct_u
(fct_v
,
fct_w
,…) qui prend en argument un entier n
et
qui retourne la valeur de la suite au rang n
.
Suites:
- \(u_{n+1} = 2u_n - 1\) et \(u_0=0\)
- \(v_{n+1} = 1/(n+1) + v_n\) et \(v_0=0\)
- \(w_{n+1} = (-1)^n n^2+w_n\) et \(w_0= 0\)
- \(t_{n+2} = t_{n+1} + t_{n}\) avec \(t_1=1\) et \(t_0 = 1\)
- \(s_{n+3} = s_{n+2} + s_{n+1} + s_{n}\) et \(s_n = 1\) pour \(n\leq 2\).
Aide: les réponses pour les rangs de 0 à 4 sont:
- u: 0, -1, -3, -7, -15
- v: 0 1.0, 1.5, 1.8333333333333333, 2.083333333333333
- w: 0, -1, 3, -6, 10
- t: 1, 1, 2, 3, 5
- s: 1, 1, 1, 3, 5
Affichez les 10 premières valeurs de chacune de ces suites.
- Extremum
Dans un fichier exo2.py
recopier le code de la fonction
qui calcule la suite w_n
. Créez une fonction
max_w
qui prend en argument un entier \(n\) et qui retourne la valeur maximale de
cette suite entre 0
et n
(inclus). De même
écrire une fonction min_w
qui retourne sa valeur minimale
entre 0
et n
.
Affichez les valeurs de ces fonctions max_w
et
min_w
pour n
égale 7.
- (
*
) Tracer une suite
Télécharger le script ici. Indiquez dans
le fichier réponses
ce que fait ce programme.
- Adaptez le pour tracer les
1000
premières valeurs de la suitew_n
. - Tracer une deuxième suite, de votre choix dans une autre couleur.
- Recherche dans une chaîne de caractères
Dans un fichier exo4.py
:
- Créez une fonction
compte_lettres
avec un argumentchaine
un argumentlettre
qui compte combien de fois la lettre apparaît dans la chaine. - Testez votre fonction pour
abracadabra
eta
, puisz
. - Créez une fonction
cherche_lettre_gauche
qui prend en argument une chaine de caractère et une lettre et qui retourne le plus petit indice où cette lettre apparaît ou le booléenFalse
si la lettre n’apparaît pas. - Créez une fonction
cherche_lettre_droite
qui retourne cette fois ci le plus grand indice où la lettre apparaît. - Testez vos fonctions
- (
*
) Écrire une fonctiondébut
qui prend en argument deux chaîneschaine
etmot
et qui retourneTrue
sichaine
commence parmot
et faux sinon. On suppose quemot
est plus petit quechaine
. - (
**
) Créez une fonctioncherche_mot
qui prend en argument une chainelongue
une chainecourte
et retourne le plus petit indice ou ce mot apparaît ou le booléenFalse
.
- Les nombres premiers
On rappelle qu’un nombre est premier s’il n’a pas d’autres diviseurs
que \(1\) et lui même. Pour vérifier
qu’un nombre a
divise un nombre b
on peut
utiliser l’opérateur %
qui calcule le reste de la division
euclidienne de a
par b
.
Dans un fichier exo5.py
:
- Créez une fonction
est_premier
qui prend en argument un entiern
et retourne un booléen indiquant si ce nombre est premier ou non. - Affichez les nombres premiers entre 2 et 100.
- Créez une fonction
premier
qui prend en argument un entiern
et retourne le plus grand nombre premier plus petit quen
. - Testez votre fonction avec 100 et 2.
Deux nombres premiers sont jumeaux
s’ils ne sont séparé
que par un unique nombre. Par exemple: 17 et 19 (séparé uniquement par
18).
- Créez une fonction
est_premier_jumeau
qui prend en argument un entiern
et retourne un booléen indiquant si ce nombre est un nombre premier jumeau.
Dans la documentation de chacune de ces fonctions, indiquez le nombre
de pas de calcul en fonction de n
.
- La suite de Syracuse
La suite de Syracuse est une suite définie ainsi:
\(u_{n+1}=u_n/2\) si \(u_n\) est pair et \(u_{n+1} = 3u_{n} + 1\).
Calculer à la main les 10 premières valeurs de cette suite quand la valeur initiale vaut
4
et8
et5
. Que constatez-vous?Dans un fichier
exo6.py
, créez une fonctionsyracuse
qui prend en argument un entiern
et un entieru0
et qui retourne la \(n^\text{ieme}\) valeur de la suite de Syracuse quand son premier terme estu0
.Testez votre fonction avec n=10 et u0=5.
Écrivez une fonction
temps_de_vol(u0)
qui prend en argument un entier et qui retourne le plus petit entiern
tel que \(u_n=4\) en prenantu0
comme première valeur.Affichez le temps de vol pour les 100 premiers entiers.
Écrire une fonction
vol_max
qui prend un argumentn
et calcule le temps de vol maximal pour tous lesu0
entre1
etn
.
Compiled the: mer. 04 sept. 2024 12:49:38 CEST