From f59a26aa5945d4fbef45e2255104f4558e40ddb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kester=20KAKa=C3=A7a?= Date: Fri, 24 Feb 2023 17:55:16 +0100 Subject: [PATCH] TP Typescript --- src/animal.class.ts | 18 ++++++++++++++++-- src/animal.interface.ts | 3 ++- src/array.ts | 34 ++++++++++++++++++++++++++-------- src/calculator.ts | 38 ++++++++++++++++++++++++-------------- src/hippopotamus.ts | 24 ++++++++++++++++++++++-- src/vehicle.ts | 19 +++++++++++++------ 6 files changed, 103 insertions(+), 33 deletions(-) diff --git a/src/animal.class.ts b/src/animal.class.ts index 63da713..4d4a859 100644 --- a/src/animal.class.ts +++ b/src/animal.class.ts @@ -1,3 +1,4 @@ +import IAnimal from './animal.interface'; import Food from './food/food'; // Créer une class Animal qui implémente l'interface IAnimal @@ -5,8 +6,21 @@ import Food from './food/food'; // par défaut, la méthode sleep réduit le poids de l'animal de 10 // le poids d'un animal ne peut pas être négatif -export default class Animal { +export default class Animal implements IAnimal { + weight: number = 80; + name: string; - // CODER ICI + constructor(name: string, weight: number) { + this.weight = weight; + this.name = name; + } + eat = (myFood: Food) => { + this.weight += 10; + } + + sleep = () => { + this.weight -= 10; + if (this.weight < 0) this.weight = 0; + } } diff --git a/src/animal.interface.ts b/src/animal.interface.ts index 32d5c62..3059ae4 100644 --- a/src/animal.interface.ts +++ b/src/animal.interface.ts @@ -5,5 +5,6 @@ import Food from './food/food'; export default interface IAnimal { - // CODER ICI + eat (myFood: Food): void | string; + sleep (): void; } diff --git a/src/array.ts b/src/array.ts index 74d328e..a5e6b2b 100644 --- a/src/array.ts +++ b/src/array.ts @@ -2,24 +2,42 @@ export default class MyArray { // Coder une méthode oddNumbers qui prend en paramètre un tableau d'entier, et renvoie un tableau uniquement composé // des entiers impairs de ce dernier - oddNumbers(arr: number[]) { - return undefined + oddNumbers(arr: number[]): number[] { + return arr.filter((key) => key % 2 !== 0 + ); } // Coder une méthode sort qui renvoie le tableau passé en paramètre trié par ordre croissant - sort(arr: number[]) { - return undefined + sort(arr: number[]): number[] { + return arr.sort((a, b) => a - b); } // Coder une méthode boringFunction qui renvoie true si les string du tableaux ont toutes la même longueur, // ou renvoie "relou ta fonction" sinon - boringFunction(arr: string[]) { - return undefined + boringFunction(arr: string[]): boolean | string { + for (let i = 1, l = arr.length; i < l; i++) { + if (arr[0].length != arr[i].length) { + return 'relou ta fonction'; + } + } + return true; } // Coder une méthode optionalArray qui renvoie true si les 2 arrays d'entiers passés en paramètres sont égaux, false sinon // Faire de même avec un 3e tableau passé en paramètre qui sera optionnel - optionalArray(a, b, c?) { - return undefined + optionalArray(a: number[], b: number[], c?: number[]): boolean { + if (c) { + if (a.length !== b.length || a.length !== c.length) { + return false; + } else { + return (a.every((value: number, index) => value === b[index]) && a.every((value: number, index) => value === c[index])); + } + } + + if (a.length !== b.length) { + return false; + } else { + return a.every((value: number, index) => value === b[index]); + } } } diff --git a/src/calculator.ts b/src/calculator.ts index 412d171..a1e2ca9 100644 --- a/src/calculator.ts +++ b/src/calculator.ts @@ -1,38 +1,48 @@ export default class MyCalculator { // Coder une methode add qui prend 2 nombres en paramètre et renvoie la somme des deux - add(a, b) { - return undefined + add(a: number, b: number) { + return a + b; } // Coder une methode subtract qui prend 2 nombres en paramètre et renvoie la différence des deux - subtract(a, b) { - return undefined + subtract(a: number, b: number) { + return a - b; } // Coder une methode multiply qui prend 2 nombres en paramètre et renvoie le produit des deux - multiply(a, b) { - return undefined + multiply(a: number, b: number) { + return a * b; } // Coder une methode divide qui prend 2 nombres en paramètre et renvoie le quotient des deux - divide(a, b) { - return undefined + divide(a: number, b: number) { + return b != 0 ? a / b : 0; } // Coder une méthode power qui prend 2 nombres en paramètre et renvoie le premier élevé à la puissance de l'autre - power(a, b) { - return undefined + power(a: number, b: number) { + return Math.pow(a, b); } // Coder une méthode squareRoot qui prend un nombre en paramètre et renvoie sa racine carrée - squareRoot(a) { - return undefined + squareRoot(a: number) { + return a >= 0 ? Math.sqrt(a) : 0; } // Coder une fonction fléchée qui renvoie true si le chiffre en paramètre est premier, false sinon - isPrime = (a) => { - return undefined + isPrime = (a: number) => { + if (a < 2) { + return false; + } else { + for (let i = 2; i <= Math.sqrt(a); i++) { + if (a % i == 0) { + return false; + } else { + return true; + } + } + } } } diff --git a/src/hippopotamus.ts b/src/hippopotamus.ts index 0c5a55b..d0caea6 100644 --- a/src/hippopotamus.ts +++ b/src/hippopotamus.ts @@ -5,8 +5,28 @@ // ajouter une méthode swim() qui ne renvoie rien mais baisse le poids de 50. import Food from './food/food'; +import Animal from './animal.class'; -export default class Hippopotamus { +export default class Hippopotamus extends Animal { + constructor (name: string, weight: number) { + super(name, weight); + } - // CODER ICI + eat = (myFood: Food) => { + if (myFood.isVegan()) { + this.weight += 20; + } else { + return 'beurk'; + } + } + + sleep = () => { + this.weight -= 20; + if (this.weight < 0) this.weight = 0; + } + + swim = () => { + this.weight -= 50; + if (this.weight < 0) this.weight = 0; + } } diff --git a/src/vehicle.ts b/src/vehicle.ts index 63e999d..d943ac0 100644 --- a/src/vehicle.ts +++ b/src/vehicle.ts @@ -9,25 +9,32 @@ export default class Vehicle { this.name = name } - // Coder une méthode nois qui switchera sur le type du véhicule et renverra + // Coder une méthode noise qui switchera sur le type du véhicule et renverra // vrooooom si le vehicule est une voiture // bep bep si le vehicule est une moto // brrrrrrrrrrrrr si le vehicule est un camion // skrrrt skrrrt dans tout autre cas noise() { - return undefined + switch (this.type) { + case VehicleType.Car: + return 'vrooooom'; + case VehicleType.Moto: + return 'bep bep'; + case VehicleType.Truck: + return 'brrrrrrrrrrrrr'; + default: + return 'skrrrt skrrrt'; + } } // Coder un callback qui renverra la methode noise précedemment codée // mais transformera la valeur de retour en majuscule myCb = () => { - return undefined + return this.noise().toUpperCase(); } // Coder une méthode accelerate qui prend en paramètre un callback et renvoie la valeur de noise() concaténée au callback accelerate(cb: () => string) { - return undefined + return this.noise() + cb(); } - - }