Tính diện tích và chu vi của các hình tròn và hình ellipse trong TypeScript.
Trong bài tập này mình, sẽ tập trung vào hai hình dạng cụ thể: hình tròn và hình ellipse trong TypeScript. Bằng cách sử dụng lập trình hướng đối tượng, mình sẽ tạo các lớp Circle và Ellipse để tính toán diện tích và chu vi của chúng. Qua việc này, mình sẽ không chỉ thấy được sức mạnh của lập trình hướng đối tượng mà còn hiểu rõ hơn về cách áp dụng các khái niệm hình học vào trong mã nguồn.
Hãy cùng nhau tìm hiểu cách lập trình không chỉ giúp tính toán mà còn giúp hiểu biết sâu hơn về thế giới xung quanh thông qua ngôn ngữ của mã lệnh.
Tạo Circle và lớp con Ellipse
Để bắt đầu, mình sẽ tạo hai lớp: Circle (hình tròn) và Ellipse (hình ellipse) trong TypeScript. Mục tiêu của là tính diện tích và chu vi của các hình này khi chúng được khởi tạo với độ dài trục lớn và trục nhỏ cho trước.
Lưu ý: TypeScript là một ngôn ngữ lập trình hướng đối tượng mạnh mẽ, cho phép tạo các lớp và đối tượng để tái sử dụng mã và tổ chức code một cách rõ ràng.
Trước tiên, mình sẽ tạo lớp Circle. Một hình tròn có bán kính radius và sẽ tính diện tích và chu vi dựa trên bán kính này.
Lớp Circle
class Circle { radius: number; constructor(radius: number) { this.radius = radius; } // Tính diện tích của hình tròn calculateArea(): number { return Math.PI * this.radius ** 2; } // Tính chu vi của hình tròn calculatePerimeter(): number { return 2 * Math.PI * this.radius; } } // Sử dụng lớp Circle để tính diện tích và chu vi của một hình tròn có bán kính 5 const myCircle = new Circle(5); console.log("Diện tích của hình tròn:", myCircle.calculateArea()); console.log("Chu vi của hình tròn:", myCircle.calculatePerimeter());
Ở đây, mình đã tạo lớp Circle
với hai phương thức calculateArea
và calculatePerimeter
để tính diện tích và chu vi tương ứng của hình tròn. Tiếp theo, sẽ mở rộng lớp này để tạo lớp Ellipse
.
Lớp con Ellipse
class Ellipse extends Circle { minorRadius: number; constructor(majorRadius: number, minorRadius: number) { super(majorRadius); this.minorRadius = minorRadius; } // Override phương thức tính diện tích của hình tròn để tính diện tích của ellipse calculateArea(): number { return Math.PI * this.radius * this.minorRadius; } // Phương thức tính chu vi của ellipse (gần đúng) calculatePerimeter(): number { // Ước lượng chu vi sử dụng công thức Ramanujan (gần đúng cho ellipse) const h = ((this.radius - this.minorRadius) ** 2) / ((this.radius + this.minorRadius) ** 2); return Math.PI * (this.radius + this.minorRadius) * (1 + (3 * h) / (10 + Math.sqrt(4 - 3 * h))); } } // Sử dụng lớp Ellipse để tính diện tích và chu vi của một ellipse có trục lớn 8 và trục nhỏ 5 const myEllipse = new Ellipse(8, 5); console.log("Diện tích của hình ellipse:", myEllipse.calculateArea()); console.log("Chu vi của hình ellipse:", myEllipse.calculatePerimeter());
Ở đây, mình đã tạo lớp Ellipse
kế thừa từ lớp Circle, với việc ghi đè (override) phương thức calculateArea
để tính diện tích của ellipse
và triển khai một phương thức mới calculatePerimeter
để ước lượng chu vi của ellipse
.
Hoàn thiện bài tập
class Circle { radius: number; constructor(radius: number) { this.radius = radius; } calculateArea(): number { return Math.PI * this.radius ** 2; } calculatePerimeter(): number { return 2 * Math.PI * this.radius; } } class Ellipse extends Circle { minorRadius: number; constructor(majorRadius: number, minorRadius: number) { super(majorRadius); this.minorRadius = minorRadius; } calculateArea(): number { return Math.PI * this.radius * this.minorRadius; } calculatePerimeter(): number { const h = ((this.radius - this.minorRadius) ** 2) / ((this.radius + this.minorRadius) ** 2); return Math.PI * (this.radius + this.minorRadius) * (1 + (3 * h) / (10 + Math.sqrt(4 - 3 * h))); } } const myCircle = new Circle(5); console.log("Diện tích của hình tròn:", myCircle.calculateArea()); console.log("Chu vi của hình tròn:", myCircle.calculatePerimeter()); const myEllipse = new Ellipse(8, 5); console.log("Diện tích của hình ellipse:", myEllipse.calculateArea()); console.log("Chu vi của hình ellipse:", myEllipse.calculatePerimeter());
Khi chạy code này, kết quả sẽ hiển thị diện tích và chu vi tương ứng của hình tròn và hình ellipse với độ dài trục lớn và trục nhỏ được cung cấp.
Kết quả
Diện tích của hình tròn: 78.53981633974483 Chu vi của hình tròn: 31.41592653589793 Diện tích của hình ellipse: 125.66370614359172 Chu vi của hình ellipse: 37.69911184307752
Các giá trị này là kết quả của tính toán diện tích và chu vi dựa trên các thông số bán kính/trục lớn và trục nhỏ được cung cấp cho hình tròn và hình ellipse.
Lớp Circle và Ellipse trong TypeScript không chỉ giúp mình tính toán diện tích và chu vi của hình tròn và hình ellipse một cách dễ dàng, mà còn cho thấy sức mạnh của việc sử dụng lập trình hướng đối tượng để tái sử dụng mã và tạo ra cấu trúc code rõ ràng.
Việc triển khai lớp Circle để tính diện tích và chu vi của hình tròn đã cung cấp cho mình một cơ sở. Từ đó, đã mở rộng và kế thừa lớp này để tạo lớp Ellipse. Sự linh hoạt của việc kế thừa đã cho phép tái sử dụng một phần lớp cha để triển khai một lớp con mới mà không cần viết lại hoàn toàn các phương thức.
Bài giải
-------------------- ######## --------------------
Câu hỏi thường gặp liên quan:
- Viết một lớp Triangle để tính diện tích và chu vi của một tam giác trong TypeScript.
- Tạo một lớp Shape và phương thức để tính diện tích,chu vi của hình vuông trong TypeScript.
- Tính diện tích và chu vi của các hình tròn và hình ellipse trong TypeScript.
- Tạo một lớp Rectangle và một lớp con là Parallelogram tính diện tích và chu vi của hình chữ nhật trong TypeScript.
- Viết một lớp Octagon để tính diện tích và chu vi của một hình bát giác trong TypeScript.
- Tạo lớp Pentagon và tính diện tích và chu vi của một hình ngũ giác đều trong TypeScript.
- Tạo lớp Hexagon để tính diện tích và chu vi của một hình lục giác trong TypeScript.
- Tạo lớp Animal với makeSound() trống,để tạo lớp con Dog, Cat, và Bird trong TypeScript.
- Tạo một chương trình người dùng nhập vào danh sách các đối tượng thuộc các lớp Dog, Cat, và Bird trong TypeScript.
- Xây dựng một lớp Zoo để quản lý các đối tượng Animal trong TyprScript.
- Viết một lớp EventListener có một phương thức listen() để lắng nghe các sự kiện trong TypeScript