Nội dung của Bài 17: Chương trình con và phân loại dưới đây, các em sẽ được tìm hiểu về khái niệm chương trình con, ý nghĩa của chương trình con; cấu trúc của chương trình con và cách phân biệt hai loại chương trình con là hàm và thủ tục. Mời các em cùng theo dõi nội dung chi tiết của bài học.
Để viết chương trình giải các bài toán lớn, phức tạp người lập trình có thể chia thành nhiều bài toán nhỏ, mỗi bài toán là một dãy lệnh mô tả một số thao tác nhất định (gọi là chương trình con). Sau đó ghép nối các chương trình con thành chương trình chính.
Chương trình con là dãy các lệnh mô tả một số thao tác nhất định và có thể được thực hiện từ nhiều vị trí trong chương trình.
Trong nhiều ngôn ngữ lập trình, chương trình con thường gồm hai loại:
sin(x) nhận vào giá trị thực x và trả về giá trị sinx,
sqrt(x) nhận vào giá trị x trả về giá trị căn bậc hai của x,
length(x) nhận vào xâu x và trả về độ dài của xâu x,...
< phần đầu >
[< phần khai báo >]
< phần thân >
Một số lưu ý:
Sự giống nhau và khác nhau giữa hàm và thủ tục
Gợi ý trả lời:
Hàm | Thủ tục |
Đầu hàm bắt đầu bằng từ khóa Function | Đầu thủ tục bắt đầu bằng từ khóa Procedure |
Luôn trả về một giá trị thuộc kiểu xác định thông qua tên hàm (các kiểu dữ liệu đơn giản: integer, real, boolean, char, string). | |
Phải chỉ ra kết quả của hàm thuộc kiểu dữ liệu nào. | |
Trong thân hàm thường có câu lệnh gán giá trị cho tên hàm. |
Chương trình tính tích của hai số nguyên a và b
Function Tich(a, b: integer): integer;
Var Kq: Integer;
Begin
Kq := a*b;
Tich := Kq;
End;
Procedure tt_Tich(a, b: integer);
Var Kq: Integer;
Begin
Kq := a*b;
Write('Tích của' , a, 'và', b, 'là', Kq);
End;
Hãy nhận xét cấu trúc hàm và thủ tục của chương trình tính tích ở trên.
Gợi ý trả lời:
Sau khi học xong Bài 17: Chương trình con và phân loại, các em cần nắm vững những nội dung trọng tâm:
Các em có thể hệ thống lại nội dung kiến thức đã học được thông qua bài kiểm tra Trắc nghiệm Tin học 11 Bài 17 cực hay có đáp án và lời giải chi tiết.
Để khai báo hàm trong Pascal bắt đầu bằng từ khóa
Để khai báo thủ tục trong Pascal bắt đầu bằng từ khóa
Kiểu dữ liệu của hàm
Câu 4-10: Mời các em đăng nhập xem tiếp nội dung và thi thử Online để củng cố kiến thức về bài học này nhé!
Trong quá trình học tập nếu có thắc mắc hay cần trợ giúp gì thì các em hãy comment ở mục Hỏi đáp, Cộng đồng Tin học DapAnHay sẽ hỗ trợ cho các em một cách nhanh chóng!
Chúc các em học tập tốt và luôn đạt thành tích cao trong học tập!
-- Mod Tin Học 11 DapAnHay
Để khai báo hàm trong Pascal bắt đầu bằng từ khóa
Để khai báo thủ tục trong Pascal bắt đầu bằng từ khóa
Kiểu dữ liệu của hàm
Nói về cấu trúc của một chương trình con, khẳng định nào sau đây là không đúng?
Khẳng định nào sau đây là đúng?
Khẳng định nào sau đây là đúng?
Mô tả nào dưới đây về hàm là sai?
Trong các cách sử dụng thủ tục sau, cách nào là phù hợp nhất ?
Hãy chọn phương án ghép đúng. Cho thủ tục sau:
Procedure p ;
Var n : integer ;
Begin
…………
End ;
Phạm vi của biến n là :
Trong các chương trình chuẩn sau đây, chương trình chuẩn nào là thủ tục chuẩn?
Họ và tên
Tiêu đề câu hỏi
Nội dung câu hỏi
Câu trả lời của bạn
Lợi ích của việc sử dụng chương trình con
- Tránh được việc phải lặp đi lặp lại cùng một dãy lệnh.
- Hỗ trợ việc thực hiện các chương trình lớn.
- Phục vụ cho quá trình trừu tựng hĩa.
- Mở rộng khả năng ngơn ngữ.
- Thuận tiện cho việc phát triển nâng cấp chương trình.
Câu trả lời của bạn
Chương trình con là dãy các lệnh mô tả một số thao tác nhất định và có thể được thực hiện từ nhiều vị trí trong chương trình.
Câu trả lời của bạn
Cấu trúc chương trình con
< phần đầu >
[< phần khai báo >]
< phần thân >
Câu trả lời của bạn
+ sin(x) nhận vào giá trị thực x và trả về giá trị sinx,
+ sqrt(x) nhận vào giá trị x trả về giá trị căn bậc hai của x,
+ length(x) nhận vào xâu x và trả về độ dài của xâu x,...
Câu trả lời của bạn
Trong nhiều ngôn ngữ lập trình, chương trình con thường gồm hai loại:
- Hàm (Function): Là chương trình con thực hiện một số thao tác nào đó, và trả về một giá trị qua tên của nó.
- Thủ tục (Procedure): Là chương trình con thực hiện một số thao tác nào đó, và không trả về giá trị nào qua tên của nó.
- Hàm:
Function Tich(a, b: integer): integer;
Var Kq: Integer;
Begin
Kq := a*b;
Tich := Kq;
End;
- Thủ tục:
Procedure tt_Tich(a, b: integer);
Var Kq: Integer;
Begin
Kq := a*b;
Write('Tích của' , a, 'và', b, 'là', Kq);
End;
Hãy nhận xét cấu trúc hàm và thủ tục của chương trình tính tích ở trên.
Câu trả lời của bạn
- Hàm trả về giá trị sau khi thực hiện nên có lệnh gán kết quả cho tên hàm Tích := Kq; và cũng chính vì vậy nên sau khai báo tên hàm có khai báo tên kiểu dữ liệu trả về Tich(a, b: integer): integer;
- Thủ tục không trả về kết quả nên có câu lệnh xuất kết quả ngay trong thủ tục Write('Tích của , a, ' và ', b, ' là ', Kq);
Câu trả lời của bạn
- Giống nhau:
+ Đều là chương trình con, có cấu trúc giống một chương trình.
+ Đều có thể chứa các tham số (tham số giá trị và tham số biến), cùng tuân theo các quy định về khai báo và sử dụng các loại tham số này. (Có thể không có tham số).
- Khác nhau:
+ Hàm:
+ Thủ tục: Đầu thủ tục bắt đầu bằng từ khóa Procedure
A. Phải trả lại kết quả
B. Phải có tham số
C. Trong hàm có thể gọi lại chính hàm đó
D. Có thể có các biến cục bộ
Câu trả lời của bạn
Phải có tham số
Đáp án B
Câu trả lời của bạn
Kiểu của một hàm được xác định bởi kiểu giá trị trả về.
Câu trả lời của bạn
Chuyển đổi chương trình được viết bằng ngôn ngữ lập trình bậc cao thành chương trình thực hiện được trên máy
A. Phát hiện được lỗi ngữ nghĩa
B. Phát hiện được lỗi cú pháp
C. Thông báo lỗi cú pháp
D. Tạo được chương trình đích
Câu trả lời của bạn
Chương trình dịch không có khả năng phát hiện được lỗi ngữ nghĩa
Đáp án A
A. Dễ lập trình hơn so với ngôn ngữ bậc cao
B. Tốc độ thực hiện nhanh hơn so với chương trình được viết bằng ngôn ngữ bậc cao
C. Gần với ngôn ngữ máy
D. Sử dụng trọn vẹn các khả năng của máy tính
Câu trả lời của bạn
Dễ lập trình hơn so với ngôn ngữ bậc cao
Đáp án A
Câu trả lời của bạn
Hằng số là các giá trị chỉ có thể được xác định một lần.
Câu trả lời của bạn
Trong tin học, hằng là đại lượng có giá trị không thay đổi trong quá trình thực hiện chương trình
Câu trả lời của bạn
Giải thuật là dãy câu lệnh chặt chẽ, rõ ràng và xác định một trình tự các thao tác trên các đối tượng dữ liệu
Câu trả lời của bạn
Đánh giá độ phức tạp của giải thuật là việc xác định khoảng thời gian và dung lượng bộ nhớ máy tính mà giải thuật cần để thực hiện giải một bài toán.
Câu trả lời của bạn
Sau một số hữu hạn bước thực hiện giải thuật cho chúng ta đạt được kết quả mong muốn.
const shape = { radius: 10, diameter() { return this.radius * 2; }, perimeter: () => 2 * Math.PI * this.radius }; shape.diameter(); shape.perimeter();
A: 20 and 62.83185307179586
B: 20 and NaN
C: 20 and 63
D: NaN and 63
Câu trả lời của bạn
Đáp án: B
Lưu ý rằng giá trị của diameter() là một hàm thông thường, trong khi giá trị của perimeter() là một arrow function.
Với các arrow function, không giống như các hàm thông thường, từ khóa this ở đây là đề cập đến phạm vi hiện tại của nó (nơi nó được gọi).
Điều này có nghĩa là khi chúng ta gọi đến permeter(), nó không đề cập đến đối tượng shape, mà là phạm vi xung quanh của nó (ví dụ như đề cập đến window)
Kết quả là không có giá trị radius trên đối tượng đó, nó trả về undefined.
for (var i = 0; i < 3; i++) { setTimeout(() => console.log(i), 1); } for (let i = 0; i < 3; i++) { setTimeout(() => console.log(i), 1); }
A: 0 1 2 and 0 1 2
B: 0 1 2 and 3 3 3
C: 3 3 3 and 0 1 2
Câu trả lời của bạn
Đáp án: C
Bởi vì hàng đợi sự kiện trong JavaScript, hàm callback setTimeout() được gọi sau khi vòng lặp được thực thi.
Và do biến i trong vòng lặp đầu tiên được khai báo bằng từ khóa var, nên giá trị này là toàn cục
Trong vòng lặp, chúng ta đã tăng giá trị của i lên 1 lần, bằng cách sử dụng toán tử ++. Vào thời điểm hàm callback setTimeout() được gọi, i đã có giá trị bằng 3 ở trong vòng lặp for đầu tiên.
Trong vòng lặp for thứ hai, biến i được khai báo bằng từ khóa let: Biến được khai báo với từ khóa let (và const) có phạm vi dạng block hay còn gọi là block-scoped (Phạm vi trong dấu ngoặc { }).
Trong mỗi lần lặp, ta sẽ có một giá trị mới và mỗi giá trị nằm trong phạm vi của vòng lặp.
function sayHi() { console.log(name); console.log(age); var name = "Lydia"; let age = 21; } sayHi();
A: Lydia and undefined
B: Lydia and ReferenceError
C: ReferenceError and 21
D: undefined and ReferenceError
Câu trả lời của bạn
Đáp án: D
Bên trong Function này, trước tiên chúng ta khai báo biến name bằng từ khóa var. Điều này có nghĩa là hoisting đã xảy ra (không gian bộ nhớ được thiết lập trong giai đoạn tạo, nhưng chưa thực hiện phép gán giá trị) với giá trị mặc định là undefined, tiếp sau đó chúng ta mới thực sự định nghĩa biến name.
Trước khi cố gắng log biến name thì chúng ta chưa hề định nghĩa biến name nào, vì hoisting xảy ra và biến name giữ giá trị là undefined.
Các biến với từ khóa let (và const) cũng được hoisting, nhưng không giống như từ khóa var, chúng không thể truy cập trước khi chúng thực sự được khởi tạo.
Đây được gọi là "Vùng chết tạm thời". Do đó, khi cố gắng truy cập các biến này trước khi được khai báo. Javascript sẽ ném ra ReferenceError.
0 Bình luận
Để lại bình luận
Địa chỉ email của hạn sẽ không được công bố. Các trường bắt buộc được đánh dấu *