Cho thuật toán sau với a = 7 và b = 10, kết quả của thuật toán là bao nhiêu

BÀI 4. BÀI TOÁN VÀ THUẬT TOÁN

1. Khái niệm bài toán

- Bài toán là một việc nào đó ta muốn máy tính thực hiện. Ví dụ: Giải phương trình bậc 2, quản lý nhân viên…

- Các bài toán được cấu tạo bởi 2 thành phần cơ bản:

  • Input: các thông tin đã có.
  • Output: Các thông tin cần tìm từ Output.

2. Khái niệm thuật toán

- Thuật toán để giải một bài toán là một dãy hữu hạn các thao tác được sắp xếp theo 1 trình tự xác định sao cho sau khi thực hiện dãy thao tác ấy, từ Input của bài toán, ta nhận ra Output cần tìm.

- Ví dụ: Tìm giá trị lớn nhất của 1 dãy số nguyên.

=> Ta có 3 bước thực hiện như sau:

* Xác định BT

- Input: Số nguyên dương N và dãy N số nguyên a1, a2, …, aN.

- Output: Giá trị lớn nhất Max của dãy số.

* Ý tưởng

- Khởi tạo giá trị Max = a1.

- Lần lượt với i từ 2 đến N so sánh ai với Max, nếu ai>Max thì Max= ai.

* Thuật toán:

Cách liệt kê:

  • B1: Nhập N và dãy a1,...,aN;
  • B2: Max \[\leftarrow\] a1, i \[\leftarrow\] 2;
  • B3: nếu i>N thì đưa giá trị Max rồi kết thúc;
  • B4: Nếu ai>Max thì Max \[\leftarrow\] ai;
  • B5: i \[\leftarrow\] i+1 rồi quay lại bước 3;

Cách lập sơ đồ khối:

- Thuật toán còn được diễn tả bằng sơ đồ khối.

- Quy định:

  • Hình ô van: các thao tác nhập, xuất dữ liệu.
  • Hình thoi: Thao tác so sánh.
  • Hình chữ nhật: Các phép toán.
  • Mũi tên: trình tự thực hiện các thao tác.

Ví dụ: Mô phỏng việc thực hiện thuật toán với N=8 và dãy số: 5, 1, 4, 7, 6, 3, 15, 11

Ds

5

1

4

7

6

3

15

11

i

2

3

4

5

6

7

8

9

Max

5

5

5

7

7

7

15

15

=> Các tính chất của thuật toán:

  • Tính dừng: Thuật toán phải kết thúc sau một số hữu hạn lần thực hiện các thao tác.
  • Tính xác định: Sau một số lần thực hiện thao tác, hoặc là kết thúc hoặc xác định để thực hiện bước tiếp theo.
  • Tính đúng đắn: Sau khi thuật toán kết thúc, ta phải nhận được Output cần tìm.

3. Một số ví dụ về thuật toán

Ví dụ 1: Kiểm tra tính nguyên tố của một số nguyên dương.

- Xác định bài toán:

  • Input: Số nguyên dương N.
  • Output: “N là số nguyên tố” hoặc “N không là số nguyên tố”.

- Ý tưởng: Ta nhớ lại định nghĩa: Một số nguyên dương N là số nguyên tố nếu nó có đúng 2 ước số khác nhau là 1 và chính nó. Do đó ta có:

  • Nếu N = 1 thì N không là nguyên tố.
  • Nếu 1 < N < 4 thì N là số nguyên tố.
  • Nếu N \[\ge\] 4 và không có ước số trong phạm vi từ 2 đến phần nguyên căn bậc 2 của N thì N là số nguyên tố.

- Thuật toán:

  • B1: Nhập số nguyên dương N.
  • B2: Nếu N = 1 thì thông báo N không là số nguyên tố rồi kết thúc.
  • B3: Nếu N < 4 thì thông báo N là số nguyên tố rồi kết thúc.
  • B4: i \[\leftarrow\] 2
  • B5: Nếu N>[\[\sqrt{N}\]][*] thì thông báo N là số nguyên tố rồi kết thúc.
  • B6: Nếu N chia hết cho i thì thông báo N là số không nguyên tố rồi kết thúc.
  • B7: i \[\leftarrow\] i + 1 rồi quay lại bước 5.

Ví dụ 2: Bài toán sắp xếp

Cho dãy A gồm N số nguyên a1, a2, a3, …,aN. Cần sắp xếp các số hạng để dãy A trở thành dãy không giảm [tức là số hạng trước không lớn hơn số hạng sau]

- Xác định bài toán:

  • Input: Dãy A gồm N số nguyên
  • Output: Dãy A được sắp xếp thành dãy không giảm.

Thuật toán sắp xếp bằng tráo đổi [Exchange Sort]

- Ý tưởng: Với 2 số liền kề, nếu số trước lớn hơn số sau ta đổi chổ cho nhau. Việc đó lặp lai, khi không còn sự đổi chổ nào nữa.

- Thuật toán

Cách liệt kê:

  • B1: Nhập vào n và dãy số nguyên a1, . . . ,aN;
  • B2: M \[\leftarrow\] N;
  • B3: Nếu M M thì quay lại bước 3;
  • B7. Nếu ai > ai+1 thì tráo đổi cho nhau;
  • B8: Quay lại bước 5; 

Ví dụ 3: Bài toán tìm kiếm

Cho dãy A gồm N số nguyên khác nhau: a1…aN. và một số nguyên k. Cần biết có hay không chỉ số i mà ai=k. Nếu có hãy cho biết chỉ số đó.

Thuật toán tìm kiếm tuần tự:

- Xác định bài toán

  • Input: dãy A gồm N số nguyên khác nhau: a1…aN và số nguyên k.
  • Output: chỉ số i mà ai=k hoặc thông báo không có số hạng nào của dãy A có giá trị là k.

- Ý tưởng: lần lượt từ số hạng thứ nhất, ta so sánh giá trị số hạng đang xét với khoá cho đến khi hoặc gặp một số hạng bằng khoá hoặc dãy đã được xét hết và không có giá trị nào bằng khoá. Trong trường hợp thứ 2 dãy A không có số hạng nào bằng khoá...

- Thuật toán

Liệt kê:

  • B1: Nhập vào N, các số hạng a1, . . . ,aN và khóa k;
  • B2: i\[\leftarrow\]1;
  • B3: Nếu ai=k thì thông báo chỉ số i rồi kết thúc;
  • B4. i \[\leftarrow\]i+1;
  • B5: Nếu i>N thì thông báo dãy A không có số hạng nào có giá trị bằng k rồi kết thúc;
  • B6: Quay lại bước 3;

Dãy A có N = 7 khóa k = 10

Tìm chỉ số i để ai = k.

i

1

2

3

4

5

6

7

ai

7

12

4

6

11

10

8

Ghi chú: k = 10 → i = 6

Trong thuật toán trên, i là biến chỉ số và nhận giá trị nguyên lần lượt từ 1 đến N + 1

Xem toàn bộ tài liệu Lớp 10: tại đây

Giải Bài Tập Tin Học 10 – Bài 4: Bài toán và thuật toán giúp HS giải bài tập, giúp cho các em hình thành và phát triển năng lực sử dụng công nghệ thông tin và truyền thông:

Xem thêm các sách tham khảo liên quan:

    • Sách Giáo Viên Tin Học Lớp 10

    Bài 1 trang 44 Tin học 10: Hãy phát biểu một bài toán và chỉ rõ Input và Output của bài toán đó.

    Lời giải:

    – Bài toán: Tìm nghiệm của một phương trình bậc 2 có dạng ax2+bx+c=0 bất kì.

    – Input: Cho ba số a,b,c.

    – Output: In ra nghiệm của phương trình bậc 2: Có thể vô nghiệm, một nghiệm hoặc có hai nghiệm.

    Bài 2 trang 44 Tin học 10: Dãy các thao tác sau:

    Bước 1: Xóa bảng;

    Bước 2: Vẽ đường tròn;

    Bước 3: Quay lại bước 1.

    Có phải là thuật toán không? Vì sao?

    Lời giải:

    Đây không phải là một thuật toán. Bởi theo định nghĩa thuật toán, từ Input của bài toán ta cần tìm kiếm một Output. Thế nhưng dãy các thao tác sau là một vòng lặp vô hạn không có tính dừng, không thỏa mãn yêu cầu là một thuật toán.

    Bài 3 trang 44 Tin học 10: Hãy chỉ ra tính dừng của thuật toán tìm kiếm tuần tự.

    Lời giải:

    – Với thuật toán tìm kiếm tuần tự, tính dừng xảy ra khi thỏa mãn một trong hai trường hợp:

    + Nếu tìm thấy giá trị cần tìm trong dãy A: ai=k thì thông báo chỉ số i rồi kết thúc.

    + Nếu không tìm thấy giá trị cần tìm trong dãy A: ai=k thì tăng i đến khi nào i>n thì thông báo không có giá trị i nào thỏa mãn và kết thúc.

    Bài 4 trang 44 Tin học 10: Cho N và dãy số a1,…,aN, hãy tìm giá trị nhỏ nhất [min] của dãy đó

    Lời giải:

    – Bước 1: Nhập N, các số hạng a1, a2,….aN và biến Min.

    – Bước 2: i ← 2, Min ← a1

    – Bước 3: Nếu ai < Min thì Min ← ai.

    – Bước 4: i ← i +1

    – Bước 5: Nếu i>N thì thông báo Min là số nhỏ nhất của dãy, kết thúc.

    – Bước 6: Quay lại bước 3.

    Bài 5 trang 44 Tin học 10: Mô tả thuật toán tìm nghiệm của phương trình bậc hai tổng quát bằng cách liệt kê hoặc bằng sơ đồ khối.

    Lời giải:

    – Bước 1: Nhập ba số a, b, c, biến Delta, x, x1, x2.

    – Bước 2: Delta ← b*b-4*a*c

    – Bước 3: Nếu Delta < 0 thì thông báo phương trình vô nghiệm và kết thúc thuật toán.

    – Bước 4: Nếu delta > 0 thì thông báo phương trình có hai nghiệm phân biệt x1 ← [-b+sqrt[delta]]/2*a và x2 ← [-b-sqrt[delta]]/2*a, kết thúc thuật toán.

    – Bước 5: Nếu delta = 0 thì thông báo phương trình có nghiệm kép x = -b/2*a

    Bài 6 trang 44 Tin học 10: Cho N và dãy số a1… aN, hãy sắp xếp dãy số đó thành dãy số không tăng [số hạng trước lớn hơn hay bằng số hạng sau].

    Lời giải:

    – Bước 1: Nhập N, các số hạng a1, a2,….aN và biến tg.

    – Bước 2: i ← 1.

    – Bước 3: Nếu ai < ai+1 thì đổi chỗ ai và ai+1

    – Bước 4: i ← i +1

    – Bước 5: Nếu i>N thì thông báo in ra dãy A, kết thúc.

    – Bước 6: Quay lại bước 3.

    Bài 7 trang 44 Tin học 10: Cho N và dãy số a1….aN hãy cho biết có bao nhiêu số hạng trong dãy có giá trị bằng 0.

    Lời giải:

    – Bước 1: Nhập N, các số hạng a1, a2,….aN và biến dem.

    – Bước 2: i ← 1.

    – Bước 3: Nếu ai = 0 thì dem ← dem +1

    – Bước 4: i ← i +1

    – Bước 5: Nếu i>N thì thông báo in ra biến dem, kết thúc.

    – Bước 6: Quay lại bước 3.

    Video liên quan

    Chủ Đề