TYPESCRIPT 2.X CĂN BẢN
Hàm trong TypeScript Sử dụng hàm generics Sử dụng hàm generics trong TypeScript Sử dụng Array trong TypeScript Sử dụng Tuple trong TypeScript Sử dụng kiểu Array, Tuple, Enum trong TypeScript Interface trong Typescript Hybrid Types với Interface trong TypeScript Khác biệt khi sử dụng 'type' và 'interface' trong TypeScript Cách dùng Enum trong TypeScript Types và interface trong TypeScript Class trong TypeScript Sử dụng Abstract Classes trong TypeScript Sử dụng Interface trong Typescript (phần 2) Sử dụng Casting trong TypeScript Tìm hiểu về Generics trong TypeScript Tìm hiểu về utility types trong Typescript Utility types phổ biến trong Typescript Sử dụng default parameters trong TypeScript Modules trong TypeScript Rest Parameters trong TypeScript Sử dụng Function Overloadings trong TypeScript Sử dụng Type Assertions trong TypeScript Sử dụng Static Methods và Properties trong TypeScript. Sử dụng Access Modifiers trong TypeScript 10 mẹo và thủ thuật hay nhất trong TypeScript 5 Cách giúp bạn loại bỏ "any" trong TypeScript Mapped Types trong TypeScript Dependency Injection trong Typescript 5 ký hiệu khó hiểu cần biết trong TypeScript Cách sử dụng @ts-expect-error trong Typescript Declaration Merging trong TypeScript Tìm hiểu Branded Type trong TypeScript Namespaces trong Typescript Phân biệt Modules và Namespaces trong TypeScript Triple-Slash Directives trong TypeScript là gì? Phần 1: Biến trong TypeScript Phần 2: Biến trong TypeScript Property trong TypeScript Phân tích JSON trong TypeScript Bài tập TypeScript: Các dạng bài tập cơ bản Bài tập TypeScript: Lập trình Hướng đối tượng trong TypeScript Bài tập TypeScript: Kiểu Generic Types trong Typescript Bài tập TypeScript: Các kiểu dữ liệu mảng và tuple. Bài tập TypeScript: Classes và Inheritance trong Typescript Bài 01: TypeScript là gì? TypeScript và Javascript Bài 02: Cài đặt TypeScript Bài 03: TypeScript Basic Types Bài 04: Khai báo biến trong TypeScript Bài 05: Lệnh If Else và Switch Case trong TypeScript Bài 06: Vòng lặp trong TypeScript
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

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 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.

test php

Bài giải

-------------------- ######## --------------------

Câu hỏi thường gặp liên quan:

Cùng chuyên mục:

Bài tập TypeScript: Classes và Inheritance trong Typescript

Bài tập TypeScript: Classes và Inheritance trong Typescript

Bài tập TypeScript: Các kiểu dữ liệu mảng và tuple.

Bài tập TypeScript: Các kiểu dữ liệu mảng và tuple.

Bài tập TypeScript: Kiểu Generic Types trong Typescript

Bài tập TypeScript: Kiểu Generic Types trong Typescript

Bài tập TypeScript: Các dạng bài tập cơ bản

Bài tập TypeScript: Các dạng bài tập cơ bản

Phân tích JSON trong TypeScript

Phân tích JSON trong TypeScript

Property trong TypeScript

Property trong TypeScript

Phần 2: Biến trong TypeScript

Phần 2: Biến trong TypeScript

Phần 1: Biến trong TypeScript

Phần 1: Biến trong TypeScript

Triple-Slash Directives trong TypeScript là gì?

Triple-Slash Directives trong TypeScript là gì?

Phân biệt Modules và Namespaces trong TypeScript

Phân biệt Modules và Namespaces trong TypeScript

Tìm hiểu Branded Type trong TypeScript

Tìm hiểu Branded Type trong TypeScript

Namespaces trong Typescript

Namespaces trong Typescript

Declaration Merging trong TypeScript

Declaration Merging trong TypeScript

Cách sử dụng @ts-expect-error trong typescript

Cách sử dụng @ts-expect-error trong typescript

5 ký hiệu khó hiểu cần biết trong TypeScript

5 ký hiệu khó hiểu cần biết trong TypeScript

Dependency Injection trong Typescript

Dependency Injection trong Typescript

Mapped Types trong TypeScript

Mapped Types trong TypeScript

5 Cách giúp bạn loại bỏ

5 Cách giúp bạn loại bỏ "any" trong TypeScript

10 mẹo và thủ thuật hay nhất trong TypeScript

10 mẹo và thủ thuật hay nhất trong TypeScript

Sử dụng Access Modifiers trong TypeScript

Sử dụng Access Modifiers trong TypeScript

Top