diff --git a/qualdev/compte_rendu.txt b/qualdev/compte_rendu.txt
index 6dad208994a2ca493123321ddcb56d81138f1d0f..c378a00edd42d2184dd750ef2d93557ab8ff3690 100644
--- a/qualdev/compte_rendu.txt
+++ b/qualdev/compte_rendu.txt
@@ -22,4 +22,4 @@ Dépot distant
 
 6) git push -u origin main
 
-7)
\ No newline at end of file
+7)git status (encore)
\ No newline at end of file
diff --git a/src/TD1.ts b/src/TD1.ts
new file mode 100644
index 0000000000000000000000000000000000000000..8cd8dfda9a33101c37c6fd5e95ef4f087b06c58c
--- /dev/null
+++ b/src/TD1.ts
@@ -0,0 +1,139 @@
+// Définition de la classe Point
+class Point {
+    x!: number;
+    y!: number;
+}
+
+// Définition de la classe Cercle
+class Cercle {
+    centre!: Point;
+    rayon!: number;
+}
+
+// Définition de la classe Rectangle
+class Rectangle {
+    coinSupGauche!: Point;
+    largeur!: number;
+    hauteur!: number;
+}
+
+// Instanciation d'un objet Cercle
+let centreCercle = new Point();
+centreCercle.x = 150;
+centreCercle.y = 100;
+
+let monCercle = new Cercle();
+monCercle.centre = centreCercle;
+monCercle.rayon = 75;
+
+// Fonction pour vérifier si un point est dans un cercle
+function pointDansCercle(cercle: Cercle, point: Point): boolean {
+    let distance = Math.sqrt(
+        (point.x - cercle.centre.x) ** 2 +
+            (point.y - cercle.centre.y) ** 2,
+    );
+    return distance <= cercle.rayon;
+}
+
+// Fonction pour vérifier si un rectangle est complétement dans un cercle
+function rectangleDansCercle(cercle: Cercle, rectangle: Rectangle): boolean {
+    let coin1: Point = rectangle.coinSupGauche;
+    let coin2: Point = { x: coin1.x + rectangle.largeur, y: coin1.y };
+    let coin3: Point = { x: coin1.x, y: coin1.y + rectangle.hauteur };
+    let coin4: Point = {
+        x: coin1.x + rectangle.largeur,
+        y: coin1.y + rectangle.hauteur,
+    };
+
+    return pointDansCercle(cercle, coin1) && pointDansCercle(cercle, coin2) &&
+        pointDansCercle(cercle, coin3) && pointDansCercle(cercle, coin4);
+}
+
+// Fonction pour vérifier s'il y a chevauchement entre un cercle et un rectangle
+function chevauchement(cercle: Cercle, rectangle: Rectangle): boolean {
+    let coin1: Point = rectangle.coinSupGauche;
+    let coin2: Point = { x: coin1.x + rectangle.largeur, y: coin1.y };
+    let coin3: Point = { x: coin1.x, y: coin1.y + rectangle.hauteur };
+    let coin4: Point = {
+        x: coin1.x + rectangle.largeur,
+        y: coin1.y + rectangle.hauteur,
+    };
+
+    return pointDansCercle(cercle, coin1) || pointDansCercle(cercle, coin2) ||
+        pointDansCercle(cercle, coin3) || pointDansCercle(cercle, coin4);
+}
+
+// Instanciation d'un rectangle
+let coinRectangle = new Point();
+coinRectangle.x = 130;
+coinRectangle.y = 90;
+
+let monRectangle = new Rectangle();
+monRectangle.coinSupGauche = coinRectangle;
+monRectangle.largeur = 30;
+monRectangle.hauteur = 20;
+
+// Test de la fonction pointDansCercle()
+let testPoint = new Point();
+testPoint.x = 140;
+testPoint.y = 100;
+
+console.log(
+    "Le point est dans le cercle ?",
+    pointDansCercle(monCercle, testPoint),
+);
+
+// Test de la fonction rectangleDansCercle()
+console.log(
+    "Le rectangle est entièrement dans le cercle ?",
+    rectangleDansCercle(monCercle, monRectangle),
+);
+
+// Test de la fonction chevauchement()
+console.log(
+    "Le rectangle chevauche-t-il le cercle ?",
+    chevauchement(monCercle, monRectangle),
+);
+
+class Temps {
+    heure!: number;
+    minute!: number;
+    seconde!: number;
+
+    affichageTemps(): void {
+        let ch = "";
+        if (this.heure < 10) ch += "0";
+        ch += this.heure + ":";
+        if (this.minute < 10) ch += "0";
+        ch += this.minute + ":";
+        if (this.seconde < 10) ch += "0";
+        ch += this.seconde;
+        console.log(ch);
+    }
+}
+
+let chrono = new Temps();
+chrono.heure = 9;
+chrono.minute = 45;
+chrono.seconde = 0;
+
+function temps2Number(t: Temps): number {
+    return t.heure * 60 * 60 + t.minute * 60 + t.seconde;
+}
+
+function number2Temps(tempsEnSeconde: number): Temps {
+    let t = new Temps();
+    t.heure = Math.floor(tempsEnSeconde / 3600);
+    tempsEnSeconde %= 3600;
+    t.minute = Math.floor(tempsEnSeconde / 60);
+    t.seconde = tempsEnSeconde % 60;
+    return t;
+}
+function multiplieTemps(t: Temps, n: number): Temps {
+    return number2Temps(temps2Number(t) * n);
+}
+
+function vitesseMoyenne(t: Temps, distance: number): Number {
+    let tEnHeures = temps2Number(t) / 3600;
+    return distance / tEnHeures;
+}
diff --git a/src/TD2.ts b/src/TD2.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/TDAdn.ts b/src/TDAdn.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f6756a23e8d3ca6beec333d3d824db8c8d0c41b5
--- /dev/null
+++ b/src/TDAdn.ts
@@ -0,0 +1,80 @@
+function estADN(seq: string): boolean {
+    for (let c of seq) {
+        if (c !== "A" && c !== "C" && c !== "G" && c !== "T") {
+            return false;
+        }
+    }
+
+    return true;
+}
+
+function transcrit(seqADN: string): string {
+    let seqARN = "";
+
+    for (let c of seqADN) {
+        if (c === "T") seqARN += "U";
+        else seqARN += c;
+    }
+
+    return seqARN;
+}
+
+function baseComplémentaire(base: string): string {
+    if (base === "A") return "T";
+    else if (base === "T") return "A";
+    else if (base === "C") return "G";
+    else if (base === "G") return "C";
+    else return "";
+}
+
+function séquenceComplémentaireInversée(seq: string): string {
+    let seqInv = "";
+
+    for (let c of seq) {
+        seqInv = baseComplémentaire(c) + seqInv;
+    }
+
+    return seqInv;
+}
+
+function estCodon(codon: string, seq: string, indice: number): boolean {
+    return seq[indice] === codon[0] && seq[indice + 1] === codon[1] &&
+        seq[indice + 2] === codon[2];
+}
+
+function nombreOccurencesCodon(codon: string, seq: string): number {
+    let nbOcc = 0;
+
+    for (let i = 0; i < seq.length; i += 3) {
+        if (estCodon(codon, seq, i)) nbOcc++;
+    }
+
+    return nbOcc;
+}
+
+function main(): void {
+    let seqADN = prompt("Entrez une séquence d'ADN: ")!;
+
+    if (estADN(seqADN)) {
+        let codon = prompt("Entrez un codon: ")!;
+
+        console.log(
+            "Séquence complémentaire inversée: " +
+                séquenceComplémentaireInversée(seqADN),
+        );
+        let seqARN = transcrit(seqADN);
+        console.log("Séquence ARN: " + seqARN);
+        console.log(
+            `Le codon ${codon} apparaît ${
+                nombreOccurencesCodon(
+                    codon,
+                    seqARN,
+                )
+            } fois dans la séquence ARN.`,
+        );
+    } else {
+        console.log("Séquence ADN erronée !!!");
+    }
+}
+
+main();