

Bài học không có tiêu đề
Presentation
•
Information Technology (IT)
•
12th Grade
•
Practice Problem
•
Easy
Nguyet Minh
Used 2+ times
FREE Resource
97 Slides • 0 Questions
1
3
Năm 2021
2
4
CHƯƠNG I
MỘT SỐ KHÁI NIỆM VỀ LẬP TRÌNH
VÀ NGÔN NGỮ LẬP TRÌNH
➢Khái niệm cơ sở về lập trình;
➢Khái niệm và các thành phần của ngôn ngữ lập trình;
➢Vai trò và phân loại chương trình dịch.
3
5
1. KHÁI NIỆM LẬP TRÌNH
VÀ NGÔN NGỮ LẬP TRÌNH
Như đã biết, mọi bài toán có thuật toán đều có thể giải được trên máy tính điện tử. Khi
giải bài toán trên máy tính điện tử, sau các bước xác định bài toán và xây dựng hoặc lựa
chọn thuật toán khả thi là bước lập trình.
Lập trình là sử dụng cấu trúc dữ liệu và các câu lệnh của ngôn ngữ lập trình cụ thể để
mô tả dữ liệu và diễn đạt các thao tác của thuật toán. Chương trình viết bằng ngôn ngữ lập
trình bậc cao nói chung không phụ thuộc vào máy, nghĩa là một chương trình có thể thực
hiện trên nhiều máy. Chương trình viết bằng ngôn ngữ máy có thể được nạp trực tiếp vào bộ
nhớ và thực hiện ngay còn chương trình viết bằng ngôn ngữ lập trình bậc cao phải được
chuyển đổi thành chương trình trong ngôn ngữ máy mới có thể thực hiện được.
Chương trình đặc biệt có chức năng 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 trong máy tính cụ thể được gọi là
chương trình dịch.
Chương trình dịch nhận đầu vào là chương trình viết bằng ngôn ngữ lập trình bậc cao
(chương trình nguồn) thực hiện chuyển đổi sang ngôn ngữ máy (chương trình đích).
Chương trình nguồn
Chương
trình dịch
Chương
trình
đích
Xét ví dụ, bạn chỉ biết tiếng Việt nhưng cần giới thiệu về trường của mình cho đoàn
khách đến từ nước Mĩ, chỉ biết tiếng Anh. Có hai cách để bạn thực hiện điều này.
Cách thứ nhất: Bạn nói bằng tiếng Việt và người phiên dịch giúp bạn dịch sang tiếng
Anh. Sau mỗi câu hoặc một vài câu giới thiệu trọn một ý, người phiên dịch dịch sang tiếng
Anh cho đoàn khách. Sau đó, bạn lại giới thiệu tiếp và người phiên dịch lại dịch tiếp. Việc
giới thiệu của bạn và việc dịch của người phiên dịch luân phiên cho đến khi bạn kết thúc nội
dung giới thiệu của mình. Cách dịch trực tiếp như vậy được gọi là thông dịch.
Cách thứ hai: Bạn soạn nội dung giới thiệu của mình ra giấy, người phiên dịch dịch
toàn bộ nội dung đó sang tiếng Anh rồi đọc hoặc trao văn bản đã dịch cho đoàn khách đọc.
Như vậy, việc dịch được thực hiện sau khi nội dung giới thiệu đã hoàn tất. Hai công việc đó
được thực hiện trong hai khoảng thời gian độc lập, tách biệt nhau. Cách dịch như vậy được
gọi là biên dịch.
Sau khi kết thúc, với cách thứ nhất không có một văn bản nào để lưu trữ, còn với cách
thứ hai có hai bản giới thiệu bằng tiếng Việt và bằng tiếng Anh có thể lưu trữ để dùng lại về
sau.
Tương tự như vậy, chương trình dịch có hai loại là thông dịch và biên dịch.
a) Thông dịch
Thông dịch được thực hiện bằng cách lặp lại dãy các bước sau:
Kiểm tra tính đúng đắn của câu lệnh tiếp theo trong chương trình nguồn;
Chuyển đổi câu lệnh đó thành một hay nhiều câu lệnh tương ứng trong ngôn ngữ
máy;
Thực hiện các câu lệnh vừa chuyển đổi được.
Như vậy, quá trình dịch và thực hiện các câu lệnh là tuần tự. Các chương trình thông
dịch lần lượt dịch và thực hiện từng câu lệnh. Loại chương trình dịch này đặc biệt thích hợp
4
6
cho môi trường đối thoại giữa người và hệ thống. Tuy nhiên, một câu lệnh nào đó phải thực
hiện bao nhiêu lần thì nó phải được dịch bấy nhiêu lần.
Các ngôn ngữ khai thác hệ quản trị cơ sở dữ liệu, ngôn ngữ đối thoại với hệ điều hành,...
đều sử dụng trình thông dịch.
b) Biên dịch
Biên dịch được thực hiện qua hai bước:
Duyệt, kiểm tra, phát hiện lỗi, kiểm tra tính đúng đắn của các câu lệnh trong chương
trình nguồn;
Dịch toàn bộ chương trình nguồn thành một chương trình đích có thể thực hiện trên
máy và có thể lưu trữ để sử dụng lại khi cần thiết.
Như vậy, trong thông dịch, không có chương trình đích để lưu trữ, trong biên dịch cả
chương trình nguồn và chương trình đích có thể lưu trữ lại để sử dụng về sau.
Thông thường, cùng với chương trình dịch còn có một số dịch vụ liên quan như biên soạn,
lưu trữ, tìm kiếm, cho biết các kết quả trung gian,... Toàn bộ các dịch vụ trên tạo thành một
môi trường làm việc trên một ngôn ngữ lập trình cụ thể. Ví dụ, Turbo Pascal 7.0, Free
Pascal 1.2,... trên ngôn ngữ Pascal, C++, Python.
Các môi trường lập trình khác nhau ở những dịch vụ mà nó cung cấp, đặc biệt là các
dịch vụ nâng cấp, tăng cường các khả năng mới cho ngôn ngữ lập trình.
5
7
2. CÁC THÀNH PHẦN CỦA NGÔN NGỮ LẬP TRÌNH
1. Các thành phần cơ bản
Mỗi ngôn ngữ lập trình thường có ba thành phần cơ bản là bảng chữ cái, cú pháp và
ngữ nghĩa.
a) Bảng chữ cái là tập các kí tự được dùng để viết chương trình. Không được phép dùng bất
kì kí tự nào ngoài các kí tự quy định trong bảng chữ cái.
•Trong Python, bảng chữ cái bao gồm các kí tự: Các chữ cái thường và các chữ cái in
hoa của bảng chữ cái tiếng Anh:
a b c d e f g h i j k l m n o p q r s t u v w x y z
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
•10 chữ số thập phân Ả Rập: 0 1 2 3 4 5 6 7 8 9
•Các kí tự đặc biệt:
+ - * / = < > [ ] .
, (dấu phẩy)
; # ^ $ @ & (
) { } :
' (dấu nháy)
dấu cách (mã ASCII 32)
_ (dấu gạch dưới)
b) Cú pháp là bộ quy tắc để viết chương trình. Dựa vào chúng, người lập trình và chương
trình dịch biết được tổ hợp nào của các kí tự trong bảng chữ cái là hợp lệ và tổ hợp nào là
không hợp lệ. Nhờ đó, có thể mô tả chính xác thuật toán để máy thực hiện.
c) Ngữ nghĩa xác định ý nghĩa thao tác cần phải thực hiện, ứng với tổ hợp kí tự dựa vào
ngữ cảnh của nó.
Ví dụ
Phần lớn các ngôn ngữ lập trình đều sử dụng dấu cộng (+) để chỉ phép cộng. Xét các
biểu thức:
A + B
(1)
I + J
(2)
Giả thiết A, B là các đại lượng nhận giá trị thực và I, J là các đại lượng nhận giá trị
nguyên. Khi đó dấu "+" trong biểu thức (1) được hiểu là cộng hai số thực, dấu "+" trong
biểu thức (2) được hiểu là cộng hai số nguyên. Như vậy, ngữ nghĩa dấu "+" trong hai ngữ
cảnh khác nhau là khác nhau.
Tóm lại, cú pháp cho biết cách viết một chương trình hợp lệ, còn ngữ nghĩa xác định
ý nghĩa của các tổ hợp kí tự trong chương trình.
Các lỗi cú pháp được chương trình dịch phát hiện và thông báo cho người lập trình
biết. Chỉ có các chương trình không còn lỗi cú pháp mới có thể được dịch sang ngôn ngữ
máy.
Các lỗi ngữ nghĩa khó phát hiện hơn. Phần lớn các lỗi ngữ nghĩa chỉ được phát hiện
khi thực hiện chương trình trên dữ liệu cụ thể.
6
8
2. Một số khái niệm
a) Tên
Mọi đối tượng trong chương trình đều phải được đặt tên theo quy tắc của ngôn ngữ
lập trình và từng chương trình dịch cụ thể.
Tên là một dãy liên tiếp khôngquá 256 kí tự bao gồm chữ số, chữ cái hoặc dấu gạch
dưới và bắt đầu bằng chữ cái hoặc dấu gạch dưới. Trong chương trình dịch Python, tên có
phân biệt chữ hoa, chữ thường.
Nhiều ngôn ngữ lập trình, trong đó có Python, phân biệt ba loại tên:
•Tên dành riêng;
•Tên chuẩn;
•Tên do người lập trình đặt.
Tên dành riêng
Một số tên được ngôn ngữ lập trình quy định dùng với ý nghĩa xác định, người lập
trình không được sử dụng với ý nghĩa khác. Những tên này được gọi là têndành riêng (còn
được gọi là từ khoá).
Tên chuẩn
Một số tên được ngôn ngữ lập trình dùng với ý nghĩa nào đó. Những tên này được
gọi là tên chuẩn. Tuy nhiên, người lập trình có thể khai báo và dùng chúng với ý nghĩa và
mục đích khác.
Ý nghĩa của các tên chuẩn được quy định trong các thư viện của ngôn ngữ lập trình.
Tên do người lập trình đặt
Tên do người lập trình đặt được dùng với ý nghĩa riêng, xác định bằng cách khai báo
trước khi sử dụng. Các tên này không được trùng với tên dành riêng.
Ví dụ
Tên do người lập trình đặt:
A1
DELTA
CT_Vidu
b) Hằng và biến
Hằng
Hằng là các đại lượng có giá trị không thay đổi trong quá trình thực hiện chương trình.
•Hằng số học là các số nguyên hay số thực (dấu phẩy tĩnh hoặc dấu phẩy động), có dấu
hoặc không dấu.
•Hằng logic là giá trị đúng hoặc sai tương ứng vớitruehoặc false.
•Hằng chuỗi là chuỗi kí tự trong bảng chữ cái. Khi viết, chuỗi kí tự này được đặt trong
cặp dấu nháy (Pascal dùng dấu nháy đơn, còn Python dùng dấu nháy kép hoặc nháy đơn).
Ví dụ
- Hằng số học:
2
0
-5
+18
1.5
-22.36
+3.14159
0.5
-2.236E01
1.0E-6
7
9
- Hằng logic:
True
False
- Hằng chuỗi:
+ Trong Pascal:
'Informatic'
'TIN HOC'
+ Trong Python: "Informatic"
'TIN HOC'
Biến
Biến là đại lượng được đặt tên, dùng để lưu trữ giá trị và giá trị có thể được thay đổi
trong quá trình thực hiện chương trình.
Tuỳ theo cách lưu trữ và xử lí, Python phân biệt nhiều loại biến. Các biến dùng trong
chương trình đều phải khai báo. Việc khai báo biến sẽ được trình bày ở các phần sau.
c) Chú thích
Có thể đặt các đoạn chú thích trong chương trình nguồn. Các chú thích này giúp cho
người đọc chương trình nhận biết ngữ nghĩa của chương trình đó dễ hơn. Chú thích không
ảnh hưởng đến nội dung chương trình nguồn và được chương trình dịch bỏ qua.
Cách tạo chú thích trong Python l đặt chúng sau dấu #
TÓM TẮT
➢Cần có chương trình dịch để chuyển chương trình nguồn thành
chương trình đích.
➢Có hai loại chương trình dịch: thông dịch và biên dịch.
➢Các thành phần của ngôn ngữ lập trình: bảng chữ cái, cú pháp và
ngữ nghĩa.
➢Mọi đối tượng trong chương trình đều phải được đặt tên:
oTên dành riêng: Được dùng với ý nghĩa riêng, không được
dùng với ý nghĩa khác.
oTên chuẩn: Tên dùng với ý nghĩa nhất định, khi cần dùng
với ý nghĩa khác thì phải khai báo.
oTên do người lập trình đặt: cần khai báo trước khi sử dụng.
➢Hằng: Đại lượng có giá trị không thay đổi trong quá trình thực
hiện chương trình.
➢Biến: Đại lượng được đặt tên. Giá trị của biến có thể thay đổi
trong quá trình thực hiện chương trình.
CÂU HỎI VÀ BÀI TẬP
1.Tại sao người ta phải xây dựng các ngôn ngữ lập trình bậc cao?
2.Chương trình dịch là gì? Tại sao cần phải có chương trình dịch?
8
10
3.Biên dịch và thông dịch khác nhau như thế nào?
4.Hãy cho biết các điểm khác nhau giữa tên dành riêng và tên chuẩn.
5.Hãy tự viết ra ba tên đúng theo quy tắc của Python và có độ dài khác nhau.
6.Hãy cho biết những biểu diễn nào dưới đây không phải là biểu diễn hằng trong Python
và chỉ rõ lỗi trong từng trường hợp:
a) 150.0
b) -22
c) 6,23
d) '43'
e) A20
f) 1.06E-15
g) 4+6
h) 'C
i) “TRUE”
9
11
Chương II
CHƯƠNG TRÌNH ĐƠN GIẢN
➢Cấu trúc chương trình;
➢Các kiến thức cơ bản về kiểu dữ liệu, phép toán, biểu thức, câu lệnh gán, tổ chức
vào/ra đơn giản;
➢Cách thực hiện chương trình trong môi trường Python.
10
12
3. CẤU TRÚC CHƯƠNG TRÌNH
1. Cấu trúc chung
Nói chung, chương trình được viết bằng một ngôn ngữ lập trình Python là chương
trình được viết bằng các câu lệnh.
2. Ví dụ chương trình đơn giản
Dưới đây xét một vài ví dụ về những chương trình đơn giản.
Ví dụ 1. Chương trình sau thực hiện việc đưa ra màn hình thông báo "Xin chao cac ban!".
print(“Xin chao cac ban!”)
11
13
4. MỘT SỐ KIỂU DỮ LIỆU CHUẨN
Các bài toán trong thực tế thường có dữ liệu vào và kết quả ra thuộc những kiểu dữ
liệu quen biết như số nguyên, số thực, kí tự,... Khi lập trình cho những bài toán như vậy,
người lập trình sử dụng các kiểu dữ liệu đó thường gặp hạn chế nhất định, phụ thuộc vào
các yếu tố như dung lượng bộ nhớ, khả năng xử lí của CPU,...
Vì vậy, mỗi ngôn ngữ lập trình thường cung cấp một số kiểu dữ liệu chuẩn cho biết
phạm vi giá trị có thể lưu trữ, dung lượng bộ nhớ cần thiết để lưu trữ và các phép toán tác
động lên dữ liệu. Dưới đây xét một số kiểu dữ liệu chuẩn thường dùng cho các biến đơn
trong Python.
1. Kiểu nguyên: int
2. Kiểu thực: float
Trong Python kiểu float đúng chính xác 15 chữ số thập phân, muốn có độ chính xác
hơn ta sử dụng thư viện deximal:
from decimal import *
Giờ giả sử muốn lấy độ chính xác tối đa 30 chữ số ta sử dụng:
getcontext().prec = 30
Để tạo một phân số chúng ta sử dụng thư viện Fraction:
from fractions import *
Cấu trúc phân số:
Fraction(<tử số>,<mẫu số>)
3. Kiểu chuỗi
Trong Python không có kiểu character, nên kiểu chuỗi trong Python là string. Đơn giản
nhất là một ký tự (sẽ được học kỹ hơn ở chương IV)
4. Kiểu logic
Là một kiểu dữ liệu mà các ngôn ngữ lập trình ngày này đều thường xuyên sử dụng.
Python cũng không ngoại lệ.
Kiểu dữ liệu này chỉ có hai giá trị:
•Một là True – có nghĩa là đúng
•Nếu không thì là False – có nghĩa là sai.
Toán tử là (is): khác hẵn toán tử ==, toán tử là cho chúng ta biết nó có phải cùng trỏ
vào một vị trí trên ô nhớ hay không.
12
14
5. BIẾN TRONG PYTHON
Như ví dụ trên, ta thấy rằng, muốn sử dụng một biến trong Python, ta đặt tên cho
biến đó mà không cần khai báo như các ngôn ngữ lập trình khác.
Ví dụ
Muốn gán giá trị cho biến a là 10, ta ghi a=10
Ta có thể khai báo:
Lop = 11
TenHS= “Tran Van A”
Pi = 3.1416
Hoặc chúng ta có thể khai báo danh sách biến như sau:
Lop, TenHS, Pi = 14, “Nguyen Van A”, 3.14
Một số chú ý khi sử dụng biến:
•Cần đặt tên biến sao cho gợi nhớ đến ý nghĩa của biến đó. Điều này rất có lợi cho
việc đọc, hiểu và sửa đổi chương trình khi cần thiết.
Ví dụ, không nên đặt tên biến là d1, d2 mà nên đặt là dtoan, dtin gợi nhớ tới ngữ
nghĩa của các biến đó là điểm toán, điểm tin của học sinh.
•Không nên đặt tên biến quá ngắn hay quá dài, dễ mắc lỗi khi viết nhiều lần tên biến.
Ví dụ, không nên dùng d1, d2 hay diemmontoan, diemmontin cho điểm toán, điểm
tin của học sinh.
•Biến được phân biệt chữ hoa và chữ thường.
•Để kiểm tra kiểu dữ liệu của biến ta sử dụng cú pháp:
type(<tên biến>)
13
15
6. PHÉP TOÁN, BIỂU THỨC, CÂU LỆNH GÁN
Để mô tả các thao tác trong thuật toán, mỗi ngôn ngữ lập trình đều xác định và sử
dụng một số khái niệm cơ bản: phép toán, biểu thức, gán giá trị cho biến.
Dưới đây sẽ xét các khái niệm đó trong Python.
1. Phép toán
Tương tự trong toán học, trong các ngôn ngữ lập trình đều có những phép toán số học
như cộng, trừ, nhân, chia trên các đại lượng thực, các phép toán chia nguyên và lấy phần dư,
các phép toán quan hệ,…
Bảng dưới đây là kí hiệu các phép toán đó trong toán và trong Python:
Phép toán
Trong toán học
Trong Python
Các phép toán số
học với số nguyên
+ (cộng), - (trừ), . (nhân), / (chia),
mod (lấy phần dư), div (chia lấy
nguyên)
+, -, *, /, %, //
Các phép toán số
học với số thực
+ (cộng), - (trừ), . (nhân),: (chia)
+, -, *, /
Các phép toán
quan hệ
< (nhỏ hơn), (nhỏ hơn hoặc bằng),
> (lớn hơn), (lớn hơn hoặc bằng), =
(bằng), (khác)
<, <=, >,
>=, ==, !=
Các phép toán
logic
(phủ định), (hoặc), (và)
not, and, or
Chú ý
- Kết quả của các phép toán quan hệ cho giá trị logic.
- Một trong những ứng dụng của phép toán logic là để tạo ra các biểu thức phức tạp
từ các quan hệ đơn giản.
2. Biểu thức số học
Trong lập trình, biểu thức số học là một biến kiểu số hoặc một hằng số hoặc các biến
kiểu số và các hằng số liên kết với nhau bởi một số hữu hạn phép toán số học, các dấu
ngoặc tròn (và) tạo thành một biểu thức có dạng tương tự như cách viết trong toán học với
những quy tắc sau:
•Chỉ dùng cặp ngoặc tròn để xác định trình tự thực hiện phép toán trong trường hợp
cần thiết;
•Viết lần lượt từ trái qua phải;
Các phép toán được thực hiện theo thứ tự:
•Thực hiện các phép toán trong ngoặc trước;
•Trong dãy các phép toán không chứa ngoặc thì thực hiện từ trái sang phải, theo thứ
tự các phép toán nhân (*),chia (/), chia nguyên (div), lấy phần dư (mod) thực hiện
trước và các phép toán cộng (+), trừ (-) thực hiện sau.
14
16
Ví dụ
Biểu thức trong Toán học
Trong Python
5a+6b
5*a + 6*b
xy
z
x*y/z
Ax2 + Bx + C
A*x*x + B*x + C
−
−
−
x + y
xz
1xy
x
2
(x + y)/(x - 1/2) - (x -
z)/(x*y)
Chú ý
a) Nếu biểu thức chứa một hằng hay biến kiểu thực thì ta có biểu thức số học thực.
b) Trong một số trường hợp nên dùng biến trung gian để có thể tránh được việc tính
một biểu thức nhiều lần.
3. Hàm số học chuẩn
Để lập trình được dễ dàng, thuận tiện hơn, các ngôn ngữ lập trình đều có thư viện
chứa một số chương trình tính giá trị những hàm toán học thường dùng. Các chương trình
như vậy được gọi là các hàm số học chuẩn. Mỗi hàm chuẩn có tên chuẩn riêng. Đối số của
hàm là một hay nhiều biểu thức số học và được đặt trong cặp ngoặc tròn ( và ) sau tên hàm.
Bản thân hàm chuẩn cũng được coi là một biểu thức số học và nó có thể tham gia vào biểu
thức số học như một toán hạng (giống như biến và hằng). Kết quả của hàm có thể là nguyên
hoặc thực hay phụ thuộc vào kiểu của đối số.
Bảng dưới đây cho biết một số hàm chuẩn thường dùng.
Để sử dụng hàm chuẩn phải khai báo thư viện math bằng câu lệnh
import math
Hàm
Biểu
diễn
Toán
học
Biểu diễn trong
Python
Kiểu đối số
Kiểu kết quả
Lũy thừa
xy
x**y
Thực hoặc
nguyên
Theo kiểu của đối
số
Căn bậc hai
x
math.sqrt(x)
Thực hoặc
nguyên
Thực
Giá trị tuyệt
đối
x
math.abs(x)
Thực hoặc
nguyên
Theo kiểu của đối
số
Lôgarit tự
nhiên
Log10x
math.log10(x)
Thực
Thực
Luỹ thừa của
số e
ex
math.exp(x)
Thực
Thực
Sin
Sinx
math.sin(x)
Thực
Thực
Cos
Cosx
math.cos(x)
Thực
Thực
Làm tròn
Round
math.round(x,y)
Thực
Thực
Ví dụ
15
17
Biểu thức toán học
24
2
bbac
a
− +
−
trong Python có thể viết dưới dạng:
(-b+math.sqrt(b*b - 4*a*c))/(2*a)
hoặc
(-b+math.sqrt(sqr(b)- 4*a*c))/2/a
Ngoài những hàm số học chuẩn trên, còn có các hàm chuẩn khác được giới thiệu
trong những phần sau.
4. Biểu thức quan hệ
Hai biểu thức cùng kiểu liên kết với nhau bởi phép toán quan hệ cho ta một biểu thức
quan hệ.
Biểu thức quan hệ có dạng:
<biểu thức 1> <phép toán quan hệ> <biểu thức 2>
trong đó, biểu thức 1 và biểu thức 2 cùng là chuỗi hoặc cùng là biểu thức số học.
Ví dụ
x < 5
i+1 >= 2*j
Biểu thức quan hệ được thực hiện theo trình tự:
•Tính giá trị các biểu thức.
•Thực hiện phép toán quan hệ.
Kết quả của biểu thức quan hệ là giá trị logic: True (đúng) hoặc False (sai).
Trong ví dụ trên, nếu x có giá trị 3, thì biểu thức x < 5 có giá trị True. Nếu i có giá trị 2
và j có giá trị 3 thì biểu thức i + 1 >= 2*jsẽ cho giá trị False.
Ví dụ
Điều kiện để điểm M có toạ độ (x; y) thuộc hình tròn tâm I(a; b), bán kính R là:
math.sqrt((x-a)*(x-a) + (y-b)*(y-b)) <= R
hoặc
(x-a)**2 + (y-b)**2 <= R*R
5. Biểu thức logic
Biểu thức logic đơn giản là biến logic hoặc hằng logic.
Biểu thức logic là các biểu thức logic đơn giản, các biểu thức quan hệ liên kết với
nhau bởi phép toán logic. Giá trị biểu thức logic là True hoặc False. Các biểu thức quan hệ
thường được đặt trong cặp ngoặc ( và ).
Dấu phép toán not được viết trước biểu thức cần phủ định, ví dụ:
not(x < 1) thể hiện phát biểu "x không nhỏ hơn 1" và điều này tương đương với biểu
thức quan hệ x >= 1.
Các phép toán and và or dùng để kết hợp nhiều biểu thức logic hoặc quan hệ, thành
một biểu thức thường được dùng để diễn tả các điều kiện phức tạp.
16
18
Ví dụ 1
Để thể hiện điều kiện 5 x 11, trong Python cần phải tách thành phát biểu dưới
dạng "5 x và x 11" và được viết như sau:
(5 <= x) and (x <= 11)
Ví dụ 2
Giả thiết M và N là hai biến nguyên. Điều kiện xác định M và N đồng thời chia hết
cho 3 hay đồng thời không chia hết cho 3 được thể hiện trong Python như sau:
((M % 3 == 0) and (N % 3 == 0)) or ((M % 3 != 0) and (N % 3 != 0))
6. Câu lệnh gán
Lệnh gán là một trong những lệnh cơ bản nhất của các ngôn ngữ lập trình.
Trong Python câu lệnh gán có dạng:
Gán một biến sử dụng cú pháp:
<biến> = <giá trị>
Gán nhiều biến sử dụng cú pháp:
<tên biến thứ nhất>, <tên biến thứ hai>, ..,<tên tên biến thứ n> =
<giá trị biến thứ nhất>, <giá trị biến thứ hai>, .., <giá trị biến thứ n>
Trong trường hợp đơn giản, tên biến là tên của biến đơn. Kiểu của giá trị biểu thức
phải phù hợp với kiểu của biến.
Chức năng của lệnh gán là đặt cho biến có tên ở vế trái dấu "=" giá trị mớibằnggiá
trị của biểu thức ở vế phải.
Ví dụ
x1 = (-b – math.sqrt(b*b - 4*a*c))/(2*a)
x2 = -b/a - x1
z = z - 1
i = i + 1
Trong ví dụ trên, ý nghĩa của lệnh gán thứ ba là giảm giá trị của biến z một đơn vị. Ý
nghĩa của lệnh gán thứ tư là tăng giá trị của biến i lên một đơn vị.
17
19
7. CÁC THỦ TỤC CHUẨN VÀO/RA ĐƠN GIẢN
Để khởi tạo giá trị ban đầu cho biến, ta có thể dùng lệnh gán để gán một giá trị cho
biến. Những chương trình đưa dữ liệu vào cho phép đưa dữ liệu từ bàn phím hoặc từ đĩa vào
gán cho các biến, làm cho chương trình trở nên linh hoạt, có thể tính toán với nhiều bộ dữ
liệu đầu vào khác nhau. Kết quả tính toán được lưu trữ tạm thời trong bộ nhớ. Những
chương trình đưa dữ liệu ra dùng để đưa các kết quả này ra màn hình, in ra giấy hoặc lưu
trên đĩa.
Các chương trình đưa dữ liệu vào và ra đó được gọi chung là các thủ tục chuẩn
vào/ra đơn giản.
Trong phần này, ta sẽ xét các thủ tục chuẩn vào/ra đơn giản của Python để nhập dữ
liệu vào từ bàn phím và đưa thông tin ra màn hình.
1. Nhập dữ liệu vào từ bàn phím
Việc nhập dữ liệu từ bàn phím được thực hiện bằng thủ tục chuẩn:
<tên biến> = input(“<Câu thông báo>”)
Trong đó, biến sẽ nhận giá trị là kiểu chuỗi, vì vậy muốn về giá trị kiểu gì ta phải ép
kiểu cho giá trị đó.
Ví dụ:
Kiểu nguyên:
a = int(input (“Nhập a:”))
Kiểu thực:
k= float(intput(“Nhập k:”))
Kiểuboolean
def StrToBool (s):
return s.lower() in ("yes","true","t",1)
k=StrToBool(input())
2. Đưa dữ liệu ra màn hình
Để đưa dữ liệu ra màn hình, Python cung cấp thủ tục chuẩn:
print(<danh sách kết quả>)
Ví dụ: xuất 15 chứ a
print(‘a’*15)
Dùng hàm format để xuất dữ liệu:
print(‘{0} {1}’.format(8, 10**5))
Kết quả: 8 100000
18
20
print('a{0}b{1}c{0}'.format('x','y'))
Kết quả: axbycx
Xuất ra và chừa một khoảng trống để xuất chuỗi tiếp theo: end=’ ‘
print (5, end=’ ‘)
print(7)
Kết quả: 5 7
Một số tab cần chú ý:
\n ->
xuống dòng
\t ->
đẩy vào 1 tab
\\u2019 hoặc \\u201d-> xuất trích dẫn
19
21
8. SOẠN THẢO, DỊCH, THỰC HIỆN
HIỆU CHỈNH CHƯƠNG TRÌNH
Để có thể thực hiện chương trình được viết bằng một ngôn ngữ lập trình, ta cần soạn
thảo, sử dụng chương trình dịch để dịch chương trình đó sang ngôn ngữ máy. Các hệ thống
lập trình cụ thể thường cung cấp phần mềm phục vụ cho việc soạn thảo, dịch và hiệu chỉnh
chương trình: nhấn Ctrl + F9
20
22
BÀI TẬP VÀ THỰC HÀNH 1
1. Mục đích, yêu cầu
•Giới thiệu một chương trình Python hoàn chỉnh đơn giản;
•Làm quen với một số dịch vụ cơ bản của Python trong việc soạn thảo, lưu trữ, dịch
và thực hiện chương trình.
2. Nội dung
a)Gõ chương trình sau:
a=int(input("Nhập a:"))
b=int(input("Nhập b:"))
c=int(input("Nhập c:"))
delta = b**2 - 4*a*c
import math
x1= (-b - math.sqrt(delta))/(2*a)
x2= (-b - math.sqrt(delta))/(2*a)
print(x1,end=' ')
print(x2)
Chú ý
-Thư viện math để sử dụng các công thức toán học.
b)Nhấn phím Ctrl + F9 để chạy chương trình.
c)Nhập các giá trị 1; -3 và 2. Quan sát kết quả hiển thị trên màn hình
d)Nhấn phím Ctrl + F9rồi nhập các giá trị 1 0 -2.
CÂU HỎI VÀ BÀI TẬP
Có thể thực hiện các bài tập tại trang https://kt.dongdadalat.edu.vn/
Đăng ký tài khoản, vào phần luyện tập để làm bài
1.1.1Bài tập mẫu
Bài 1: Nhập vào hai số a, b kiểu số nguyên. Tính tổng hiệu tích thương của hai số
đó.
Trong phần nhập xuất từ file
Vì nhập 2 giá trị a,b. Trong python không đọc được từng giá trị độc lập trong file nên
chúng ta phải đọc một xâu và bỏ đi các ký tự khoảng trắng dư thừa trước và sau xâu
bằng câu lệnh:
for i in fi :
f=i.strip()
Sau đó ta tách từng phần tử của xâu bằng phương thức split() căn cứ vào khoảng
trắng
f=f.split(' ')
Để đọc hai giá trị và chuyển về số nguyên ta sử dụng ép kiểu
a=int(f[0])
21
23
b=int(f[1])
Ý tưởng giải thuật:
Input: a, b kiểu số nguyên
Output: tong, hieu, tich, thuong
B1: Nhập a, b
B2: Gán: tong ← a+b; hieu ← a-b; tich ← a*b; thuong ← a/b
B3: Xuất các kết quả tong, hiệu, tích thương; kết thúc
Trong khi xuất giá trị thương nếu muốn hạn chế phần thập phân ta sử dụng:
print('%.<số chữ số thập phân>f' %<giá trị>)
Ví dụ:
print('%.2f' %th)
fo.write('%.2f' %th)
Chương trình:
a=int(input(“Nhập vào giá trị a:”))
b=int(input(Nhập vào giá trị b:”))
to = a+b
hi = a-b
ti = a*b
th = a/b
print(to)
print(hi)
print(ti)
print(th)
Bài 2: Nhập vào ba cạnh của tam giác, tính diện tích và chu vi của tam giác.
Ý tưởng giải thuật:
Input: a, b, c
Output: dientich, chuvi
Trong bài này sử dụng công thức Heron
𝑆 = √𝑝(𝑝 − 𝑎)(𝑝 − 𝑏)(𝑝 − 𝑐)
Với p=(a+b+c)/2
Gọi là nửa chu vi
22
24
B1: Nhập vào 3 số a,b,c
B2: chuvi ← a+b+c; xuất chu vi
B3: p ← chuvi/2
B4: dientich ← math.sqrt(p*(p-a)*(p-b)*(p-c)); xuất dientich
Chương trình:
a=int(input("Nhap vao gia tri a:"))
b=int(input("Nhap vao gia tri b:"))
c=int(input("Nhap vao gia tri c:"))
chuvi=a+b+c
print(chuvi)
p = chuvi/2
import math
dientich = math.sqrt(p*(p-a)*(p-b)*(p-c))
print('%.2f' %dientich)
Bài 3: Giải phương trình bậc 2: 𝒂𝒙𝟐+ 𝒃𝒙 + 𝒄 = 𝟎 (𝒂 ≠ 𝟎)
Ý tưởng giải thuật:
Input: a,b,c
Output: Nghiệm của chương trình
Trong bài này chúng ta chưa thực hiện biện luận, mặc định chương trình có hai
nghiệm phân biệt. Khi nhập giá trị, chú ý nhập trường hợp delta bằng 0 để coi chương
trình báo lỗi như thế nào để chú ý khắc phục.
ValueError: math domain error trong bài này lỗi bên là do tính toán căn bậc 2 của số
âm.
B1: Nhập a, b, c.
B2: delta ← b2 – 4ac
B3:
x1← (-b-math.sqrt(delta))/(2*a) ; x2← (-b+math.sqrt(delta))/(2*a); xuất x1,
x2
Chương trình:
a=int(input("Nhap vao gia tri a:"))
b=int(input("Nhap vao gia tri b:"))
c=int(input("Nhap vao gia tri c:"))
delta=b**2 - 4*a*c
23
25
import math
x1= (-b-math.sqrt(delta))/(2*a)
x2= (-b+math.sqrt(delta))/(2*a)
print('%.2f'%x1)
print('%.2f'%x2)
Bài 4: Viết chương trình nhập vào hai số. Hoán đổi giá trị của hai số đó.
Ý tưởng giải thuật:
Cách 1: sử dụng biến trung gian để lưu giá trị.
B1: Nhập a, b
B2: Gán temp = a; a= b; b= temp; Xuất giá trị a, b.
Trong bài này, đây là bước đệm để chúng ta chuẩn bị cho thuật toán sắp xếp trên dãy số.
Chương trình:
a=int(input('Nhập giá trị a: '))
b=int(input('Nhập giá trị b: '))
temp = a
a = b
b = temp
print("Giá trị a: " + str(a))
print("Giá trị b: " + str(b))
Cách 2: Không sử dụng biến trung gian
B1: Nhập a, b
B2: a ← a+b
B3: b ← a – b
B4: a ← a – b
B5: Xuất a, b
Chương trình:
a=int(input('Nhập giá trị a: '))
b=int(input('Nhập giá trị b: '))
a = a + b
b = a - b
a = a - b
print("Giá trị a: " + str(a))
24
26
print("Giá trị b: " + str(b))
Bài 5: Nhập vào một số có 3 chữ số. Cho biết giá trị các chữ số hàng chục, hàng
trăm, hàng đơn vị.
Ví dụ: 357
Chữ số hàng đơn vị là 7
Chữ số hàng chục là 5
Chữ số hàng trăm là 3
Ý tưởng giải thuật:
Trong Python, để lấy phần dư trong phép chia sử dụng %, để lấy phần nguyên trong
phép chia sử dụng //
B1: Nhập a
B2: dv ← a%10
B3: a ← a//10
B4: hc ← a%10
B5 ht ← a//10
B6: Xuất dv, hc, ht
Chương trình:
a= int(input("Nhập giá trị a có ba chữ số:"))
dv = a % 10
a//=10
hc=a % 10
ht=a // 10
print('Chi so hang don vi:' + str(dv))
print('Chi so hang chuc:' + str(hc))
print('Chi so hang tram:' + str(ht))
1.1.2Bài tập tự giải
Bài 1. Biểu thức
Tên file:
BTHUC.***
In ra tổng, tích, hiệu và thương của 2 số được nhập vào từ bàn phím. Kết quả
lấy 3 chữ số sau dấu phẩy.
Input
- Hai số thực a, b
Output
- 4 giá trị tổng, hiệu, tích, thương (a/b) của hai số a và b, mỗi giá trị trên 1 dòng
25
27
Ví dụ:
Input
Output
1 2
3.000
-1.000
2.000
0.500
Bài 2. Số gấp đôi
Tên file:
multi2.***
Nhập số nguyên A, in ra số lớn gấp đôi số A
INPUT: số nguyên A
OUTPUT: in ra kết quả bài toán
Ví dụ
INPUT
OUTPUT
6
12
Bài 3. Phép tính
Tên file:
exp.***
Nhập vào ba số A, B, C. Sau đó in ra kết quả phép tính (A – B) x C
INPUT: 3 số nguyên A, B, C
OUTPUT: in ra mà kết quả bài toán
Ví dụ
INPUT
OUTPUT
10 1 3
27
BÀI 4. Nội quy trường học
tên file:
NOIQUY.***
Theo quy định của nhà trường, mỗi trường hợp không đeo thẻ học sinh sẽ bị trừ
a điểm thi đua của lớp, mỗi trường hợp nói chuyện trong lớp bị trừ b điểm thi đua và
mỗi trường hợp đi học muộn bị trừ c điểm. Sổ đầu bài ghi nhận trong tháng có t
trường hợp không đeo thẻ, n trường hợp nói chuyện riêng, và m trường hợp đi học
muộn.
Hãy nhập các giá trị a, b, c, t, n, m từ bàn phím và tính tổng điểm bị trừ thi đua
trong tháng đó.
Input:
•Các giá trị a, b, c, t, n, m
Output:
•Kết quả bị trừ thi đua trong tháng
Ví dụ
Input
Output
26
28
Bài 5. Diện tích
khu vườn
Tên file: AREA0.***
Một khu đất hình chữ nhật có cạnh là a và b. Người ta xây một khu vui chơi
hình tròn tại vị trí trong khu đất như hình vẽ.
Hỏi rằng khu đất còn lại (phần gách chéo) có diện tích bằng bao nhiêu. Biết
rằng giá trị pi = 3.14
INPUT:
- Hai số thực a, b được viết trên cùng 1 dòng
OUTPUT:
- Diện tích phần gạch chéo tính được, kết quả lấy 2 chữ số ở phần thập phân.
Ví dụ:
INP
UT
OUT
PUT
2.00
4.00
4.86
Bài 6. Chọn giầy
Tên file:
SHOES.***
Bạn Việt được bố mẹ chuẩn bị đưa đi công viên sau khi đạt kết quả học tập tốt
trong kỳ thi HSG cấp tỉnh.
Bạn Việt dự định sẽ diện một đôi giầy thật đẹp để đi chơi. Trong tủ đựng giày
của Việt có n đôi giày không được xếp gọn gàng nên giờ Việt phải tìm để lấy ra được
1 đôi giầy.
Bạn hãy cho biết trong trường hợp xấu nhất thì Việt phải lấy ra ít nhất bao
nhiêu chiếc giầy để có thể có được 1 đôi.
INPUT:
- Một số nguyên dương n (n ≤ 100) duy nhất là số đôi giầy mà Việt có trong tủ.
OUTPUT:
- Một số nguyên dương duy nhất là số lượng chiếc giầy cần lấy ra từ trong tủ để
luôn có được 1 đôi giầy.
1 1 1 1
1 1
3
b
a
27
29
Ví dụ:
IN
PUT
OUT
PUT
Giải thích
2
3
Trong tủ của Việt có 2 đôi giầy. Vậy,
trong trường hợp xấu nhất Việt cần phải
lấy ra ít nhất 3 chiếc để luôn tồn tại 1 đôi.
Bài 7. Bắt tay
Tên file: HANDS.***
Tại một hội nghị cấp cao có n người tham gia. Mỗi người tham gia sẽ bắt tay tất
cả những người còn lại trong hội nghị.
Em hãy cho biết trong hội nghị đó đã có tất cả bao nhiêu lượt bắt tay?
INPUT:
- Một số nguyên dương duy nhất là n (n ≤ 10.000).
OUTPUT:
- Số lượng các lượt bắt tay trong hội nghị.
Ví dụ:
INPUT
OUTPUT
3
3
Bài 8. Khối lập phương
Tên file:
CUBICS.***
Quà sinh nhật của bạn Tý là một bộ khối lập phương xếp hình. Tý xếp thành n
tháp, tháp bậc i có đáy i khối (1 ≤ n ≤ 10.000, i =1 -> n). Như hình vẽ ở dưới có 5
tháp có bậc lần lượt là 1, 2, 3, 4 và 5.
Yêu cầu: Coi bộ khối lập phương xếp hình của Tý có số lượng khối vuông là
vô hạn. Hãy giúp Tý tính xem nếu xếp các khối vuông này thành hình tháp bậc n thì
cần dùng hết bao nhiêu khối vuông.
INPUT:
- Chứa duy nhất một số n (n ≤ 10.000)
OUTPUT:
- Một số nguyên là số lượng khối vuông cần dùng.
Ví dụ:
Input
Output
28
30
Ví dụ 1
2
3
Ví dụ 2
3
6
29
31
Chương III
Cấu trúc rẽ nhánh và lặp
➢Cấu trúc rẽ nhánh và lặp trong lập trình;
➢Các câu lệnh thực hiện rẽ nhánh và lặp của CodeBlocks.
Câu lệnh
Điều kiện
Sai
Đúng
30
32
9. CẤU TRÚC RẼ NHÁNH
1. Rẽ nhánh
Thường ngày, có rất nhiều việc chỉ được thực hiện khi một điều kiện cụ thể nào đó
được thoả mãn.
Ví dụ, Châu và Ngọc thường cùng nhau chuẩn bị các bài thực hành môn Tin học.
Một lần Châu hẹn với Ngọc: "Chiều mai nếu trời không mưa thì Châu sẽ đến nhà
Ngọc".
Một lần khác, Ngọc nói với Châu: "Chiều mai nếu trời không mưa thì Ngọc sẽ đến
nhà Châu, nếu mưa thì sẽ gọi điện cho Châu để trao đổi".
Câu nói của Châu cho ta biết một việc làm cụ thể (Châu đến nhà Ngọc) sẽ được thực
hiện nếu một điều kiện cụ thể (trời không mưa) thoả mãn. Ngoài ra không đề cập đến việc gì
sẽ xảy ra nếu điều kiện đó không thoả mãn (trời mưa).
Cách diễn đạt như vậy thuộc dạng mệnh đề thiếu:
Nếu... thì…
Câu nói của Ngọc khẳng định một trong hai việc cụ thể (Ngọc đến nhà Châu hay
Ngọc gọi điện cho Châu) chắc chắn sẽ xảy ra. Tuy nhiên, việc nào trong hai việc sẽ được
thực hiện thì tuỳ thuộc vào điều kiện cụ thể (trời không mưa) thoả mãn hay không.
Cách diễn đạt như vậy thuộc dạng mệnh đề đủ:
Nếu… thì…, nếu không thì…
Từ đó có thể thấy,trong nhiều thuật toán, các thao tác tiếp theo sẽ phụ thuộc vào kết
quả nhận được từ các bước trước đó.
Cấu trúc dùng để mô tả các mệnh đề có dạng như trên được gọi là cấu trúc rẽ nhánh.
Ví dụ, để giải phương trình bậc hai:
ax2 + bx + c = 0, (a 0)
trước tiên ta tính biệt số delta D = b2 – 4ac.
Nếu D không âm, ta sẽ đưa ra các nghiệm. Trong trường hợp ngược lại, ta phải thông
báo là phương trình vô nghiệm.
Như vậy, sau khi tính D, tuỳ thuộc vào giá trị của D, một trong hai thao tác sẽ được
thực hiện (h. 4).
Mọi ngôn ngữ lập trình đều có các câu lệnh để mô tả cấu trúc rẽ nhánh.
Hình 4. Sơ đồ thể hiện cấu trúc rẽ nhánh
Nhập a, b, c
Tính D b2 – 4ac
Delta 0 ?
Thông báo vô
nghiệm, rồi kết thúc
Tính và đưa ra
nghiệm thực, rồi kết
thúc
Sai
Đúng
31
33
2. Câu lệnh if
Để mô tả cấu trúc rẽ nhánh, Python dùng câu lệnh if. Tương ứng với hai dạng mệnh
đề thiếu và đủ nói ở trên, Python có hai dạng câu lệnh if:
a) Dạng thiếu
if <Điều kiện> :
<Dãy lệnh>
Ví dụ:
a = int(input())
if a%2==0 :
print(a," chan")
b) Dạng đủ
if <Điều kiện> :
< Dãy lệnh 1>
else:
< Dãy lệnh 2>
Hoặc:
if <Điều kiện 1> :
< Dãy lệnh 1>
elif <Điều kiện 2> :
< Dãy lệnh 2>
else:
< Dãy lệnh 3>
Trong đó:
•Điều kiện, Điều kiện 1, Điều kiện 2: Biểu thức quan hệ hoặc lôgic.
•Dãy lệnh, Dãy lệnh 1, Dãy lệnh 2, Dãy lệnh 3 là lệnh của Python.
Hình 5
Hình 6
Ở dạng thiếu: điều kiện sẽ được tính và kiểm tra. Nếu điều kiện đúng (có giá trị
true) thì câu lệnh sẽ được thực hiện, ngược lại thì câu lệnh sẽ bị bỏ qua (h. 5).
Ở dạng đủ: điều kiện cũng được tính và kiểm tra. Nếu điều kiện đúng thì câu lệnh 1
sẽ được thực hiện, ngược lại thì câu lệnh 2 sẽ được thực hiện (h. 6).
Ví dụ:
a = int(input())
if a%2==0 :
print(a," chan")
else:
print(a," chan")
Điều kiện
Câu lệnh
Đúng
Sai
Điều kiện
Câu lệnh
1
Đúng
Sai
Câu lệnh
2
32
34
4. Một số ví dụ
Ví dụ 1. Tìm nghiệm thực của phương trình bậc hai:
ax2 + bx + c = 0 , với a 0.
Input: Các hệ số a, b, c nhập từ bàn phím.
Output: Đưa ra màn hình các nghiệm thực hoặc thông báo "Phuong trinh vo nghiem".
a=int(input())
b=int(input())
c=int(input())
delta = b*b - 4*a*c
import math
if delta ==0 :
x=-b/(2*a)
print(x)
else:
if delta<=0 :
print("Phương trinh vo nghiem")
else:
x1= (-b - math.sqrt(delta))/(2*a)
x2= (-b - math.sqrt(delta))/(2*a)
print(x1,end=' ')
print(x2)
Trong Python có cấu trúc pass gọi là dành chỗ
Ví dụ:
a = int(input())
if a%2==0 :
else:
print(a," le")
Chúng ta thấy câu lệnh if ở trên thiếu mất dòng lệnh trước else, nếu để như thế
chương trình dịch sẽ báo lỗi. Vì thế để không báo lỗi tại vị trí đó ta dùng cấu trúc pass
a = int(input())
if a%2==0 :
pass
else:
print(a," le")
33
35
Trong một số trường hợp sử dụng lệnh if đơn giản ta có thể sử dụng if như câu lệnh gán:
a=int(input())
b=int(input())
c = a+b if a<b else a-b
print(c)
Bài tập tự giải
Câu 1. Viết chương trình Python cho phép nhập vào 3 số thực là điểm số của 3
môn thi. In ra màn hình “Qua mon” nếu điểm trung bình >= 5.0 ngược lại in ra
“Khong qua mon”. Điểm trung bình lấy 4 chữ số thập phân.
Input
Output
4.5 6.7 3.0
Diem trung binh la:
4.7333
Khong qua mon
Câu 2. Viết chương trình Python cho phép nhập vào 3 số nguyên a, b, c. In ra màn
hình số lớn nhất trong 3 số.
Input
Output
1 2 3
3
Câu 3. Viết chương trình Python cho phép nhập vào một kí tự c bất kì. Kiểm tra kí
tự vừa nhập vào có thuộc Alphabet hay không. Nếu có thì in ra “la ki tu Alphabet”
ngược lại in ra “khong phai la ki tu alphabet”.
Input
Output
A
a la ki tu Alphabet
Câu 4. Viết chương trình Python cho phép nhập vào một số nguyên dương bất
biểu thị cho năm có giá trị đó. Kiểm tra năm đó có phải năm nhuận hay không. Được
biết năm nhuận là năm chia hết cho 4 và không chia hết cho 100.
Input
Output
2020
2020 la nam nhuan
Câu 5. Viết chương trình Python cho phép nhập vào một số nguyên dương X.
Kiểm tra số X có thuộc dạng 2n không.
VD:
Input
Output
8
8 co dang 2^3
Input
Output
9
8 khong co dang 2^n
Câu 6. Viết chương trình Python cho phép nhập vào một số nguyên dương m là số
phút cuộc gọi. Tính tổng tiền phí cuộc gọi. Được biết tiền phí cuộc gọi được tính như
sau:
Phí thuê bao bắt buộc là 25.000.
600 đồng cho mỗi phút gọi của 50 phút đầu tiên.
400 đồng cho mỗi phút gọi của 150 phút tiếp theo.
34
36
200 đồng cho bất kỳ phút gọi nào sau 200 phút đầu tiên.
Input
Output
210
119000
Câu 7. Viết phương trình Python tìm nghiệm của phương trình ax+b = 0 với a, b
là hai số nguyên được nhập từ bàn phím. In ra “Phuong trinh vo so nghiem”,
“Phuong trinh vo nghiem” cho các trường hợp tương ứng. Nếu có nghiệm thì lấy 4
chữ số sau dấu chấm.
Input
Output
-3 10
Phuong trinh co nghiem la
3.3333
Câu 8. Viết chương trình Python cho phép nhập vào số nguyên dương X. Kiểm
tra tính chính phương của số X.
Input
Output
9
9 la so chinh phuong
Câu 9. Viết chương trình Python nhập vào một số nguyên dương X. In ra X là
ngày thứ mấy trong tuần (viết bằng tiếng anh). Ngày được định dạng như sau: 2 – 8
tương ứng Monday – Sunday. Nếu không tồn tại ngày trong tuần in ra “Invalid day
of week”.
Input
Output
2
Monday
Input
Output
9
Invalid day of week
Câu 10. Viết chương trình Python nhập vào 4 số nguyên dương x1, y1, x2, y2 với
(x1, y1) là toạ độ quân xe thứ nhất, (x2, y2) là toạ độ quân xe thứ hai. In ra màn hình
“YES” nếu trong nước đi kế tiếp quân xe thứ nhất có thể ăn được quân xe thứ hai,
ngược lại in ra “NO”.
Input
Output
1 5
1 3
YES
Câu 11. Viết chương trình Python nhập vào 4 số nguyên dương x1, y1, x2, y2 với
(x1, y1) là toạ độ quân hậu thứ nhất, (x2, y2) là toạ độ quân hậu thứ hai. In ra màn
hình “YES” nếu trong nước đi kế tiếp quân hậu thứ nhất có thể ăn được quân hậu thứ
hai, ngược lại in ra “NO”.
Input
Output
1 5
3 3
YES
Câu 12. Viết chương trình Python nhập vào 4 số nguyên dương x1, y1, x2, y2 với
(x1, y1) là toạ độ quân mã thứ nhất, (x2, y2) là toạ độ quân mã thứ hai. In ra màn hình
“YES” nếu trong nước đi kế tiếp quân mã thứ nhất có thể ăn được quân mã thứ hai,
ngược lại in ra “NO”.
Input
Output
3 3
YES
35
37
4 5
Câu 13. Viết chương trình Python nhập vào 4 số nguyên dương x1, y1, x2, y2 với
(x1, y1) là toạ độ quân mã, (x2, y2) là toạ độ quân xe. In ra màn hình “Xe thang” nếu
trong một nước đi xe có thể ăn mã, in ra “Ma thang” nếu trong một nước đi mã có thể
ăn xe. Nếu cả hai không ăn được nhau in ra “Hoa”.
Input
Output
1 1
2 1
Xe thang
36
38
10. CẤU TRÚC LẶP
1. Lặp
Với a là số nguyên và a > 2, xét các bài toán sau đây:
Bài toán 1. Tính và đưa kết quả ra màn hình tổng
.
Bài toán 2. Tính và đưa kết quả ra màn hình tổng
cho đến khi
< 0,0001.
Với cả hai bài toán, dễ thấy cách để tính tổng S có nhiều điểm tương tự:
•Xuất phát, S được gán giá trị 0; Trong bài toán này, chúng ta không thể gán bằng
1
𝑎
vì sẽ sai khi nhập số a quá lớn
•Tiếp theo, cộng vào tổng S một giá trị
với N = 0,1, 2, 3, 4, 5,… Việc cộng
này được lặp lại một số lần.
Đối với bài toán 1, số lần lặp là 100 và việc cộng vào tổng S sẽ kết thúc khi đã thực hiện
việc cộng 100 lần.
Đối với bài toán 2, số lần lặp chưa biết trước nhưng việc cộng vào tổng S sẽ kết thúc khi
điều kiện
< 0,0001 được thoả mãn.
Nói chung, trong một số thuật toán có những thao tác phải thực hiện lặp đi lặp lại một số
lần. Một trong các đặc trưng của máy tính là có khả năng thực hiện hiệu quả các thao tác
lặp. Cấu trúc lặp mô tả thao tác lặp và được phân biệt hai loại là lặp với số lần biết trước và
lặp với số lần chưa biết trước.
Các ngôn ngữ lập trình đều có các câu lệnh để mô tả cấu trúc điều khiển lặp.
2. Lặp có số lần lặp biết trước và câu lệnh for
Có hai thuật toán Tong_1a và Tong_1b để giải bài toán 1 như sau:
Thuật toán Tong_1a
Bước 1.S 1/a; N 0; {Khởi tạo S và N}
Bước 2.N N + 1;
Bước 3. Nếu N > 100 thì chuyển đến bước 5;
Bước 4.S S + 1/(a + N) rồi quay lại bước 2;
Bước 5.Đưa S ra màn hình, rồi kết thúc.
Thuật toánTong_1b
Bước 1.S 1/a; N 101;
{Khởi tạo S và N}
1
1
1
1
...
1
2
100
S
aa
a
a
=+
+
++
+
+
+
1
1
1
1
...
...
1
2
S
aa
a
aN
=+
+
++
+
+
+
+
1
aN+
1
aN+
1
aN+
37
39
Bước 2.N N – 1;
Bước 3. Nếu N < 1 thì chuyển đến bước 5;
Bước 4.S S + 1/(a + N) rồi quay lại bước 2;
Bước 5.Đưa S ra màn hình rồi kết thúc.
Lưu ý, số lần lặp của cả hai thuật toán trên là biết trước và như nhau (100 lần).
Trong thuật toán Tong_1a, giá trị N khi bắt đầu tham gia vòng lặp là 1 và sau mỗi lần
lặp N tăng lên 1 cho đến khi N > 100 (N = 101) thì kết thúc lặp (thực hiện đủ 100 lần).
Trong thuật toán Tong_1b, giá trị N bắt đầu tham gia vòng lặp là 100 và sau mỗi lần lặp N
giảm đi 1 cho đến khi N < 1 (N = 0) thì kết thúc lặp (thực hiện đủ 100 lần). Ta nói cách lặp
trong thuật toán Tong_1a là dạng tiến và trong thuật toán Tong_1blà dạng lùi.
Để mô tả cấu trúc lặp với số lần biết trước, Python dùng câu lệnh for như sau:
Để sử dụng câu lệnh for trước tiên chúng ta nên học hàm range
Hàm range
Cú pháp: range(start, stop, step)
Hàm range trả về một biến chứa một dãy các giá trị nằm trong vùng từ start đến stop
- 1 với bước nhảy step.
Hàm range có 3 dạng:
Dạng 1: range(stop) nhận 1 tham số stop là giá trị cuối của dãy số, với các giá trị lặp
từ 0 đến stop – 1 và mỗi lần tăng 1 đơn vị.
Ví dụ: range(4) sẽ trả về dãy số 0, 1, 2 ,3.
Dạng 2: range(start, stop) nhận 2 tham số start, stop là giá trị đầu và giá trị cuối của
dãy số, với các giá trị lặp từ start đến stop – 1 và mỗi lần tăng 1 đơn vị.
Ví dụ: range(2, 8) sẽ trả về dãy số 2 ,3, 4, 5, 6, 7, 8.
Dạng 3: range(start, stop, step) nhận 3 tham số start, stop, step là giá trị đầu, giá trị
cuối và bước nhảy của dãy số, với các giá trị lặp từ start đến stop – 1 và mỗi lần tăng step
đơn vị.
Chú ý: nếu step là số âm ta sẽ có vòng lặp lùi
Ví dụ: range(2, 9, 3) sẽ trả về dãy số 2 , 5, 8.
range(4,0, -1): 4, 3, 2, 1.
Chú ý quan trọng: Trong hàm range chúng ta không thể cho giá trị chạy đến stop.
Vì thế nếu muốn chạy đến giá trị stop phải sử dụng range(stop + 1).
Câu lệnh for:
Cú pháp:
for <tên biến> in <chuỗi lặp> :
<Câu lệnh>
Chú ý: Trong <chuỗi lặp> có thể sử dụng hàm range, list, xâu hay kiểu tệp.
Ví dụ:
38
40
for i in range(1,10):
print(i,end=' ')
Dùng để in các giá trị từ 1 đến 9
Ví dụ 1. Xuất ra các giá trị từ 1 đến n. Với n được nhập từ bàn phím.
n=int(input())
for i in range(1,n):
print(i,end=' ')
Ví dụ 2.Chương trình sau thực hiện việc nhậptừ bàn phím hai số nguyên dương M và N (M
< N), tính và đưa ra màn hình tổng các số chia hết cho 3 hoặc 5 trong phạm vi từ N đến M.
Chương trình:
n=int(input())
m=int(input())
for i in range(n,m):
if i%3 ==0 or i%5== 0 :
print(i,end=' ')
Bài tập:
1.Đưa ra màn hình như bên dưới:
*******
******
*****
****
***
**
*
2.Đưa ra màn hình như bên dưới:
1******
12*****
123****
1234***
12345**
123456*
1234567
3.Tính tổng từ 1 đến n với n nhập vào từ bàn phím.
4. Nhập N từ bàn phím (N>0), tính giai thừa của n (n!)
5.Tính tổng các số lẻ trong phạm vi từ 1 đến 20.
6.Tính tổng các số chẵn trong phạm vi từ 1 đến n.
7.Nhập 1 số A từ bàn phím, Kiểm tra A có phải là số nguyên tố hay không?
8.Nhập M từ bàn phím (M>0), Tính giá trị của biểu thức Tong = 12 + 22 + 32 + ... +
M2
9.Mộtngười gửi tiết kiệm 100 đồng. Hỏi sau 12 tháng anh ta sẽ thu được số tiền là bao
nhiêu? Biết, lãi xuất mỗi tháng của Ngân hàng là 0.15%.
10.Một giáo viên vào lớp và phát kẹo cho các em học sinh theo qui tắc sau : em đầu tiên
được nhận 1 viên kẹo, em tiếp theo nhận số kẹo nhiều hơn em trước đó 3 viên. Hỏi
nếu lớp học có 20 học sinh thì tổng số kẹo phải có để Giáo viên phát đủ cho cả lớp.
11.Tính tổng số đồng tiền được thả vào bàn cờ, biết:
39
41
➢Bàn cờ có 64 ô.
➢Ô đầu tiên, ta thả vào 1 đồng tiền.
➢Các ô còn lại, ta thả đồng tiền vào theo qui ước ô tiếp theo có số lượng
đồng tiền gấp đôi ô trước đó.
3. Lặp với số lần chưa biết trước và câu lệnh while
Có thể xây dựng thuật toán Tong_2 như sau để giải bài toán 2.
Thuật toánTong_2
Bước 1. S 1/a; N 0; {Khởi tạo S và N}
Bước 2. Nếu 1/(a + N) < 0,0001 thì chuyển đến bước 5;
Bước 3.NN + 1;
Bước 4.SS + 1/(a + N) rồi quay lại bước 2.
Bước 5. Đưa S ra màn hình, rồi kết thúc
Như vậy, việc lặp với số lần chưa biết trước sẽ chỉ kết thúc khi một điều kiện cho trước
được thoả mãn.
3.1 Câu lệnh While:
Cú pháp:
while <Điều kiện> :
<Dãy lệnh>
Giải thích: Nếu điều kiện đúng, các lệnh bên trong vòng lặp sẽ được thực hiện cho đến khi
nó nhận giá trị sai.
Lưu ý: khi sử dụng vòng lặp while cần lưu ý các điểm sau đây:
Vòng lặp phải có tính dừng. Nghĩa là điều kiện phải có trường hợp sai. Trong một số tình
huống, người ta vẫn sử dụng vòng lặp vô hạn, nhưng cần có cơ chế để thoát khỏi vòng lặp
khi cần thiết.
Nếu có nhiều lệnh chịu sự chi phối của while, thì chúng cần được đặt trong dấu khối
lệnh.
Ví dụ 1.Tìm ước chung lớn nhất (UCLN) của hai số nguyên dương M và N.
Có nhiều thuật toán khác nhau tìm UCLN của M và N. Sau đây là một thuật toán tìm
UCLN.
Thuật toán
Bước 1: Nhập M, N;
Bước 2: Nếu M = N thì lấy giá trị chung này làm UCLN rồi chuyển đến bước 5;
Bước 3: Nếu M > N thì M ơ M - N rồi quay lại bước 2;
Bước 4: N ← N - M rồi quay lại bước 2;
Bước 5: Đưa ra kết quả UCLN rồi kết thúc.
40
42
Hình 9. Sơ đồ khối của thuật toán tìm ước chung lớn nhất
Chương trình sau thể hiện thuật toán tìm ước chung lớn nhất.
n=int(input())
m=int(input())
while n!=m :
if n>m :
n-=m
else :
m-=n
print ("UCLN: ",n)
3.2. Vòng lặp while..else, for..else
Cú pháp:
a)while <Điều kiện> :
<Dãy lệnh>
else :
<Kết quả của câu lệnh while>
b)for <tên biến> in range(<bắt đầu>, <kết thúc>, <bước nhảy>) :
<Câu lệnh>
else :
<Kết quả của câu lệnh for>
3.3 Câu lệnh break, continue
Sử dụng break cho phép chúng ta có thể kết thúc vòng lặp ở một thời điểm nào đó trong
toàn bộ quá trình lặp.
Ví dụ: Nhập vào số n nguyên dương. Kiểm tra số n có phải số nguyên tố hay không.
n = int(input("Nhập số n:"))
kt = True
if n < 2: kt = False
elif n>=4:
Nhập M và N
M ơ M – N
N ơ N – M
Đúng
M = N ?
Sai
M > N ?
Sai
Đúng
Đưa ra M; Kết thúc
41
43
import math
for i in range(2,int(math.sqrt(n))+1):
if n % i == 0:
kt=False
break;
if kt:
print(n," là số nguyên tố")
else:
print(n, " không là số nguyên tố")
Sử dụng continue cho phép chúng ta bỏ qua một hoặc một số lệnh nào đó dưới
continue trong quá trình lặp.
Ví dụ:
for val in "Xin chào các bạn":
if val == "c" or val=="n":
continue
print(val, end="")
print("\nKết thúc!")
Ở đoạn code trên chúng ta sẽ bỏ qua các câu lệnh bên dưới continue khi giá trị của val là
ký tự “c” hoặc “n”. Do đó khi kết thúc toàn bộ quá trình lặp sẽ chỉ hiển thị :
Xi hào á bạ
Kết thúc!
TÓM TẮT
➢Các ngôn ngữ lập trình đều có câu lệnh thể hiện cấu trúc rẽ
nhánh và cấu trúc lặp.
➢Câu lệnh rẽ nhánh có hai dạng:
a) Dạng thiếu;
b) Dạng đủ.
➢Có thể gộp dãy câu lệnh thành câu lệnh ghép.
➢Các câu lệnh mô tả cấu trúc lặp:
a) Lặp với số lần biết trước;
b)Lặp với số lần không biết trước.
Định lí Bohn Jacopini (Bon Ja-co-pi-ni):Mọi quá trình tính toán đều có
thể thực hiện dựa trên ba cấu trúc cơ bản là cấu trúc tuần tự, cấu trúc rẽ
nhánh và cấu trúc lặp.
BÀI TẬP VÀ THỰC HÀNH 2
1. Mục đích, yêu cầu
•Xây dựng chương trình có sử dụng cấu trúc rẽ nhánh;
•Làm quen với việc hiệu chỉnh chương trình.
42
44
nếu điểm (x;y) thuộc hình tròn bán kính r (r > 0), tâm (a; b).
trong trường hợp còn lại.
2. Nội dung
Bài toán. Bộ số Pi-ta-go
Biết rằng bộ ba số nguyên dương a, b, c được gọi là bộ số Pi-ta-go nếu tổng các bình
phương của hai số bằng bình phương của số còn lại. Viết chương trình nhập từ bàn phím ba
số nguyên dương a, b, c và kiểm tra xem chúng có là bộ số Pi-ta-go hay không.
Ý tưởng: Kiểm tra xem có đẳng thức nào trong ba đẳng thức sau đây được thực hiện hay
không:
a2 = b2 + c2
b2 = a2 + c2
c2 = a2 + b2.
Những công việc cần thực hiện:
a)Gõ chương trình sau:
a=int(input())
b=int(input())
c=int(input())
if a*a==b*b+c*c or b*b==a*a+c*c or c*c==a*a+b*b :
print(a," ",b," ",c," la bo ba Pitago")
else:
print(a," ",b," ",c," khong la bo ba Pitago")
b)Nhập các giá trị a = 3, b = 4, c = 5.
c)Lặp lại các bước trên với bộ dữ liệu a = 700, b = 1000, c = 800.
CÂU HỎI VÀ BÀI TẬP
1.Hãy cho biết sự giống và khác nhau của hai dạng câu lệnh if.
2.Có thể dùng câu lệnh while để thay cho câu lệnh for được không? Nếu được, hãy thực
hiện điều đó với chương trình Tong các số chia hết cho 3 hoặc 5 từ N đến M.
3.Viết câu lệnh if tính:
a)
22x + y
z =x + y
0,5
b)
x + y
z=
x+y
4.Lập trình tính:
a)Y =
50n
n + 1n=1
;
nếu
22x + y
1.
nếu 22x + y >1và y x.
nếu 22x + y >1 và y<x .
43
45
b)e(n) = 1 + 11
1
++...+
1!2!
n! +..., với n lần lượt bằng 3, 4,... cho đến khi 1
n! < 2
10-6. Đưa
các giá trị e(n) ra màn hình.
5.Lập trình để giải bài toán cổ sau:
Vừa gà vừa chó.
Bó lại cho tròn.
Ba mươi sáu con,
Một trăm chân chẵn.
Hỏi bao nhiêu con mỗi loại?
6.Nhập từ bàn phím tuổi của cha và con (tuổi của cha hơn tuổi con ít nhất là 25). Đưa ra
màn hình bao nhiêu năm nữa thì tuổi cha gấp đôi tuổi con.
7.Một người gửi tiết kiệm không kì hạn với số tiền A đồng với lãi suất 0,2% mỗi tháng.
Hỏi sau t tháng, người đó rút tiền thì sẽ nhận được số tiền là bao nhiêu. Biết rằng tiền
gửi tiết kiệm không kì hạn không được tính lãi kép.
´
44
46
CHƯƠNG IV. KIỂU DỮ LIỆU CÓ CẤU TRÚC
Ngoài các kiểu dữ liệu chuẩn, các ngôn ngữ lập trình còn có những kiểu dữ liệu được xây
dựng từ những kiểu đã có.
➢Kiểu List;
➢Kiểu chuỗi;
➢Kiểu bản ghi.
45
47
Dữ liệu là thông tin xử lí bằng máy tính gồm dữ liệu vào, kết quả trung gian và kết
quả ra. Dữ liệu có thể thuộc kiểu chuẩn như đã biết ở chương II. Các kiểu dữ liệu chuẩn nói
chung không đủ để biểu diễn dữ liệu của các bài toán trong thế giới thực, thường có cấu trúc
phức tạp, gồm nhiều thành phần liên kết với nhau theo một cách thức nào đó.
Ví dụ, cho hai véctơ thực a = (a1, a2,..., an) và b = (b1, b2,..., bn), cần tính véctơ c =
(c1, c2,..., cn) là tổng của a và b (ci = ai + bi, 1 i n). Dữ liệu vào của bài toán là hai dãy,
mỗi dãy gồm n số thực, tương ứng giá trị các thành phần của hai véctơ a và b, dữ liệu ra là
dãy n giá trị thực ci = ai+ bi (1i n). Như vậy, các dữ liệu của bài toán trên có cấu trúc là
dãy hữu hạn các phần tử có cùng kiểu dữ liệu chuẩn là kiểu số thực. Để mô tả dữ liệu có cấu
trúc phức tạp như vậy, các ngôn ngữ lập trình đều có các quy tắc, cách thức cho phép người
lập trình có thể xây dựng những kiểu dữ liệu phức tạp từ những kiểu đã có. Kiểu dữ liệu
được xây dựng bằng cách như vậy gọi là kiểu dữ liệu có cấu trúc. Chẳng hạn, kiểu List được
giới thiệu dưới đây là một kiểu dữ liệu có cấu trúc thông dụng, có thể dùng để mô tả dữ liệu
bài toán tính tổng hai véctơ nói trên.
Mỗi ngôn ngữ lập trình luôn có tập kiểu dữ liệu chuẩn, các quy tắc, cách thức để xây
dựng các kiểu dữ liệu cấu trúc từ kiểu dữ liệu chuẩn. Theo các quy tắc và cách thức này
người lập trình xác định tên kiểu, cấu trúc, khuôn dạng của kiểu dữ liệu cần xây dựng từ các
thành phần, mỗi thành phần có kiểu dữ liệu chuẩn hoặc kiểu dữ liệu đã được xác định trước
đó, cách khai báo biến, tập giá trị và các phép toán có thể thực hiện trên tập giá trị đó.
Dưới đây xét ba kiểu dữ liệu có cấu trúc thông dụng nhất trong nhiều ngôn ngữ lập
trình là kiểu List, kiểu bản ghi và kiểu chuỗi.
46
48
11. KIỂU LIST VÀ BIẾN CÓ CHỈ SỐ
Chúng ta chỉ xét hai kiểu List thông dụng với nhiều ngôn ngữ lập trình là kiểu List
một chiều và kiểu List hai chiều.
1. Kiểu List một chiều
List là một kiểu dữ liệu có cấu trúc rất quan trọng trong NNLT Python. List là dãy hữu
hạn các phần tử, mỗi phần tử có một chỉ số được đánh số từ 0.
Ví dụ:
A = [ 7, 8, “Bai tap”, 9, True]
Khác với kiểu dữ liệu array, các phần tử trong List có thể khác kiểu nhau.
Trong List có thể chứa List khác. Ví dụ:
Mang2chieu = [[3, 4, 5], [2, 5, 8]]
Để truy cập vào các phần tử trong List, ta ghi tên của phần tử kềm chỉ số của nó.
Ví dụ có List:
A = [ 7, 8, “Bai tap”, 9, True]
Để truy cập đến phần tử thứ 2 trong List A ta ghi: A[1]. Khi đó A[1] = 8
Trong Python khi ghi chỉ số âm nó sẽ chạy ngược từ cuối List lên đầu. Ví dụ: A[-2] =
9. Để cắt một nhóm trong List sẽ sử dụng cú pháp:
<Tên list>[<chỉ số bắt đầu>:<chỉ số kết thúc>]
Ví dụ: A[2:4] sẽ được [“Bai tap”, 9, True]
Nếu <chỉ số bắt đầu> = 0 chúng ta không cần ghi cũng được: A[:3] nó sẽ giống chúng
ta ghi A[0:3] sẽ được [7, 8, “Bài tap”, 9]
2 Các thao tác cơ bản trong List:
Trong nội dung này, chưa đề cập đến nội dung kiến thức về phương thức và hàm để
sau khi học nội dung chương trình con sẽ trình bày kỹ hơn.
Chú ý:
-Khi trình bày nội dung có chữ “phương thức” ta sẽ sử dụng <Tên List>.<Phương
thức>
-Khi trình bày nội dung có chữ “hàm” ta sẽ sử dụng <hàm>(<Tên List>)
2.1 Chèn một phần tử vào List:
2.1.1 Thay thế giá trị tại vị trí bất kỳ trong Python
Ví dụ: Thay thế giá trị “Python” tại chỉ số 0
a= [7, 8,"Bai tap", 9, True]
a[0] = "Python"
print(a)
47
49
2.1.2 Hàm insert trong Python:
Phương thức insert dùng để chèn một giá trị tại chỉ số được xác định.
Cú pháp:
<tên List>.insert(<chỉ số>, <giá trị>)
2.1.3 Hàm append trong Python
Phương thức dùng để thêm một phần tử vào vị trí cuối cùng của List hiện tại, nó không
trả về một List mới mà thay vào đó sẽ cập nhật List hiện tại.
Cú pháp:
48
50
<tên List>.append(<giá trị>)
Ví dụ:
2.1.4 Hàm extend() trong Python
Phương thức List extend() trong Python, đây là phương thức dùng để gộp một List A
và List B, tức là sau khi chạy List A sẽ bổ sung thêm toàn bộ phần tử của List B vào vị trí
cuối cùng.
Cú pháp:
<Tên List A>.extend(Tên List B)
Ví dụ:
49
51
2.2 Xóa trong Python
2.2.1 Hàm clear trong Python:
Phương thức clear chỉ có nhiệm vụ là xóa tất cả item ra khỏi list nên không cần một
tham số truyền vào.
Cú pháp:
<tên List>.clear()
Ví dụ:
2.2.2 Hàm remove() trong Python
Phương thức dùng để xóa một phần tử ra khỏi List bằng cách lặp từ đầu đến cuối và so
sánh giá trị cần xóa, nếu phần tử nào giống thì xóa. Lưu ý là nó chỉ xóa lần so khớp đầu
50
52
tiên, tức nếu trong list bạn có 2 phần tử giống thì phần tử đầu tiên bị xóa, phần tử thứ hai thì
không.
Cú pháp:
<Tên List>.remove(<giá trị>)
Ví dụ:
2.2.3 Hàm pop() trong Python
Phương thức dùng để xóa một phần tử được chỉ định ra khỏi danh sách, kết quả trả về
của nó là phần tử bị loại bỏ.
Cú pháp:
<Tên List>.pop(<chỉ số>)
Ví dụ:
51
53
2.3 Hàm index() trong Python
Phương thức index () tìm phần tử đã cho đầu tiên trong danh sách và trả về vị trí của
nó.
Cú pháp:
<Tên List>.index(<Giá trị>)
Ví dụ:
2.4 Hàm count() trong Python
Phương thức này dùng để đếm tổng số lần xuất hiện của một giá trị nào đó trong List.
Cú pháp:
<Tên List>.count(<Giá trị>)
52
54
Ví dụ:
2.5 Hàm reverse trong Python
Phương thức reverse để đảo ngược các phần tử trong List.
Cú pháp:
<Tên List>.reverse()
Ví dụ:
2.6 Hàm sort trong Python
Phương thức này dùng để sắp xếp các phần tử của một List theo hướng tăng dần hoặc
giảm dần. Để sắp xếp giảm dần ta phải kết hợp reverse
Cú pháp:
53
55
<Tên List>.sort(reverse = “<Giá trị logic>”)
Giá trị logic là True hoặc False. Trong đó sắp xếp tăng dần không cần khai báo reverse
Chú ý: Để sử dụng được soft các phần tử trong List phải cùng kiểu
Ví dụ sắp xếp tăng dần:
Ví dụ sắp xếp giảm dần:
Với cú pháp bên dưới ta có thể hiểu đơn giản là sau khi sắp xếp xong ta đảo ngược
List.
2.7 Hàm copy() trong Python:
Phương thức dùng để sao chép một List mới giống List ban đầu
Cú pháp:
54
56
<Tên List mới> = <Tên list>.copy()
Ví dụ:
2.8 Hàm len trong Python:
Hàm dùng để trả về số phần tử trong List.
Cú pháp:
len(<Tên List>)
Ví dụ:
2.9 Hàm max và min trong Python:
Hàm dùng để trả về giá trị lớn nhất và nhỏ nhất trong List.
Cú pháp:
55
57
max (<Tên List>)
min (<Tên List>)
Ví dụ:
2.10 Hàm sum trong Python
Hàm dùng để tính tổng các phần tử trong List
Cú pháp:
Sum(<Tên List>)
Ví dụ:
3 Tuple trong List
56
58
3.1 Định nghĩa: Tuple trong Python là một kiểu dữ liệu dùng để lưu trữ các đối tượng
không thay đổi về sau (giống như hằng số). Còn lại thì cách lưu trữ của nó cũng khá giống
như kiểu dữ liệu list.
Để khai báo một enum thì mọi người sử dụng cú pháp sau:
Hoặc có thể khai báo như sau:
Đặc biệt nếu một tuple chỉ có một phần tử chúng ta phải thêm dấu phẩy ở phía sau: b =
(3,)
3.2 Các thao tác trên Tuple:
3.2.1 Xóa Tuple:
Sử dụng hàm del để xóa Tuple
Cú pháp:
57
59
del <tên Tuple>
Ví dụ:
3.2.2 Thêm một phần tử:
Để thêm một phần tử trong Tuple thực chất là thêm một Tuple bằng toán tử “+”
Cú pháp:
<Tên Tuple> += <Tuple cần thêm>
Ví dụ:
Như vậy ta có thể chèn thêm một Tuple sau một Tuple khác
3.2.3 Tuple lồng:
58
60
Ta có thể lồng một Tuple vào một Tuple khác như sau:
Như thế Tuple a sẽ bắt đầu từ chỉ số số 6 của Tuple b, và số 2 nghĩa là chỉ số 2 của
Tuple a mang giá trị bằng 2.
4 Một số ví dụ List trong Python:
4.1 Nhập xuất một List từ bàn phím:
Dạng 1: Nhập từng phần tử
Code:
n = int(input("Nhap n:"))
a=[]
for i in range(n):
a.append(int(input("Nhap gia tri: ")))
print(a)
59
61
Dạng 2: Nhập một List một lần
Code:
n = int(input("Nhap n:"))
a = list(map(int,input().split()))
print(a)
4.2 Tính tổng các phần tử chẵn trong List
Code:
60
62
n = int(input("Nhap n:"))
a=list(map(int,input("Nhap gia tri cua List:").split()))
s=0
for i in a:
#duyệt các phần tử trong List a
if i %2==0:
s+=i;
print(s)
4.3 Số hạng âm lớn nhất của dãy và chỉ số của nó
Code:
n = int(input("Nhap n:"))
a=list(map(int,input("Nhap gia tri cua List:").split()))
print(a)
i = 0
while i<n and a[i]>0: i+=1
if i==n: print("Mảng không có số am")
else:
ln = a[i]
for j in range(i+1,n):
if a[j]<0 and a[j]>ln:
ln = a[j]
print("Gia tri lon nhat",ln)
for k in range(n):
61
63
if a[k] == ln:
print((k+1), end=" ")
print("\n")
4.4 Xuất tất cả các dãy con chứa số dương liên tiếp nhiều nhất
Code:
n = int(input("Nhap n:"))
a=list(map(int,input("Nhap gia tri cua List:").split()))
l = [0]*n
if a[0]> 0: l[0] = 1
else: l[0] = 0
for i in range(1,n):
if a[i]>0: l[i] = l[i-1] + 1
else: l[i] = 0
ln = max(l)
for i in range(n):
if l[i] == ln:
print(a[i-ln+1:i+1])
5 Bài tập tự giải
Nhập vào List a có n số. Thực hiện các công việc sau:
1. Tổng các phần tử của dãy
2. Số lượng các số hạng dương và tổng của các số hạng dương.3. Trung bình cộng
62
64
của cả dãy. Trung bình cộng các phần tử dương của mảng. Trung bình cộng các phần
tử âm của mảng
4. Chỉ số của số hạng dương đầu tiên của dãy
5. Chỉ số của số hạng âm cuối cùng của dãy
6. Số hạng lớn nhất của dãy và chỉ số của nó
7. Số hạng âm lớn nhất của dãy và chỉ số của nó
8. Xuất các số nguyên tố trong mảng
9. Giá trị lớn thứ nhì của dãy và các chỉ số của các số hạng đạt giá trị lớn nhì
10. Số lượng các số dương liên tiếp nhiều nhất
11. Số lượng các số hạng dương liên tiếp có tổng lớn nhất
12. Số lượng các số hạng âm liên tiếp có tổng lớn nhất
13. Số lượng các số hạng liên tiếp đan dấu nhiều nhất (dãy số hạng liên tiếp được gọi
là đan dấu nếu tích hai số liên tiếp âm)
14. Số lượng các phần tử không tăng nhiều nhất
15. Số lượng các phần tử bằng giá trị X (nguyên) cho trước
16. Số lượng các phần tử >= giá trị X (nguyên) cho trước
17. Chuyển các số hạng dương của mảng lên đầu mảng và in mảng ra màn hình
18. Xóa phần tử ở vị trí X trong mảng
19. Sắp xếp tăng dần mảng đã cho
20. Sắp xếp giảm dần mảng đã cho
21. Chèn một số nguyên m (m nhập vào từ bàn phím) vào vị trí k .
22. Xuất phần tử trùng nhiều nhất trong mảng
23. Sắp xếp các số âm tăng dần, các số dương giảm dần nhưng vị trí âm dương không
thay đổi
24. Sinh dãy nhị phân có độ dài n.
2. Kiểu List hai chiều
Xét bài toán tính và đưa ra màn hình bảng cửu chương.
1 2 3 4 5 6 7 8 9
10
2 4 6 8 10 12 14 16 18
20
3 6 9 12 15 18 21 24 27
30
4 8 12 16 20 24 28 32 36
40
5 10 15 20 25 30 35 40 45
50
6 12 18 24 30 36 42 48 54
60
7 14 21 28 35 42 49 56 63
70
8 16 24 32 40 48 56 64 72
80
9 18 27 36 45 54 63 72 81
90
Bảng cửu chương
63
65
Ta thấy bảng cửu chương có dạng bảng gồm các giá trị. Ta có thể biểu diễn bảng cửu
chương bằng kiểu dữ liệu List hai chiều.
List hai chiều là bảng các phần tử
Nhận xét rằng mỗi hàng của List hai chiều có cấu trúc như một List một chiều cùng kích
thước. Nếu ta coi mỗi hàng của List hai chiều là một phần tử thì ta có thể nói List hai chiều
là List một chiều mà mỗi phần tử là List một chiều.
Như vậy, ta cũng có thể mô tả dữ liệu của bảng cửu chương là kiểu List một chiều gồm 10
phần tử, mỗi phần tử lại là List một chiều có 9 phần tử, mỗi phần tử là một số nguyên.
Tương tự như với kiểu List một chiều, với kiểu List hai chiều, các ngôn ngữ lập trình cũng
có các quy tắc, cách thức cho phép xác định:
•Tên kiểu List hai chiều;
•Số lượng phần tử của mỗi chiều;
•Kiểu dữ liệu của phần tử;
•Cách khai báo biến;
•Cách tham chiếu đến phần tử.
a) Khai báo
Tổng quát, khai báo biến List hai chiều trong CodeBlocks như sau:
<tên biến> =[]
Ví dụ. Các khai báo sau đây là hợp lệ:
A = []
Ví dụ. Tham chiếu tới phần tử ở dòng thứ 5, cột thứ 9 của biến List ArrayInt khai báo
trong ví dụ 1 được viết: ArrayInt [4][ 8].
b) Một số ví dụ
Ví dụ 1. Nhập xuất ma trận.
a = []
n=int(input())
m=int(input())
for i in range(n) :
one = []
for j in range(m):
one.append(int(input()))
a.append(one)
for i in range(n):
for j in range (m):
print(a[i][j],end=' ')
print()
64
66
Chú ý
- Các biến List thường gồm số lượng lớn các phần tử nên cần lưu ý phạm vi sử dụng
chúng để khai báo kích thước và kiểu dữ liệu để tiết kiệm bộ nhớ.
- Ngoài hai kiểu List một chiều và hai chiều, còn có kiểu List nhiều chiều.
BÀI TẬP VÀ THỰC HÀNH 3
1. Mục đích, yêu cầu
•Nâng cao kĩ năng sử dụng một số câu lệnh và một số kiểu dữ liệu thông qua việc tìm
hiểu, chạy thử các chương trình có sẵn;
•Biết giải một số bài toán tính toán, tìm kiếm đơn giản trên máy tính.
65
67
12. KIỂU DỮ LIỆU CHUỖI
Dữ liệu trong các bài toán không chỉ thuộc kiểu số mà cả kiểu phi số - dạng kí tự. Dữ
liệu kiểu chuỗi là dãy các kí tự.
Ví dụ. Các chuỗi kí tự đơn giản:
'Bach khoa'
'KI SU'
'2007 la nam Dinh Hoi'
"Bài tập"
"Hình ảnh"
"Con đường"
" " " Công cha như núi Thái Sơn
Nghĩa mẹ như nước trong nguồn chảy ra
Một lòng thờ mẹ kính cha
Cho tròn chữ hiếu mới là đạo con " " "
Chuỗi là dãy các kí tự trong bảng mã ASCII, mỗi kí tự được gọi là một phần tử của
chuỗi. Số lượng kí tự trong một chuỗi được gọi là độ dài của chuỗi. Chuỗi có độ dài bằng 0
gọi là chuỗi rỗng.
Các ngôn ngữ lập trình đều có quy tắc, cách thức cho phép xác định:
•Tên kiểu chuỗi;
•Cách khai báo biến kiểu chuỗi;
•Số lượng kí tự của chuỗi;
•Các phép toán thao tác với chuỗi;
•Cách tham chiếu tới phần tử chuỗi.
Trong nguyên tắc hoạt động một chuỗi có dấu nháy đơn (‘ ‘) và dấu nháy kép (“ ”) là
như nhau. Chỉ khác nhau nếu trong chuỗi có ký tự trùng lắp.
Ví dụ: "I'm a people" : nếu dùng ' I'm a people' sẽ báo lỗi vì bị trùng. Tương tự cho dấu
nháy đôi.
Còn nếu xuất xâu nhiều dòng ta dùng " " " <chuỗi>" " ". Khi sử dụng " " " đồng
nghĩa với việc ta dùng ‘/n’ nghĩa là cho ký tự xuống dòng
Có thể xem chuỗi là List một chiều mà mỗi phần tử là một kí tự. Các kí tự của chuỗi
được đánh số thứ tự, thường bắt đầu từ 1.
Tương tự như với List, tham chiếu tới phần tử của chuỗi được xác định bởi tên biến
chuỗi và chỉ số đặt trong cặp ngoặc [ và ].
Ví dụ, giả sử có biến Hoten = 'NguyenLeHuyen' thì Hoten[5] cho ta kí tự 'n' là kí tự thứ sáu
của biến chuỗi Hoten.
Dưới đây trình bày cách khai báo kiểu dữ liệu chuỗi, các thao tác xử lí chuỗi và một số ví dụ
sử dụng kiểu chuỗi trong Python.
2. Các thao tác xử lí chuỗi
Kiểu dữ liệu xâu (String) trong Python là một trong các kiểu phổ biến nhất trong
Python. Chuỗi ký tự trong Python được nằm trong dấu ngoặc kép đơn hoặc dấu ngoặc
kép. Python coi các lệnh trích dẫn đơn và kép là như nhau. Ví dụ: 'Python' tương đương
với "Python". (Xem lại ở phần 1)
2.1 Gán biến cho xâu
2.1.1 Gán biến đơn dòng
<tên biến> = "<xâu>" hoặc <tên biến> = '<xâu>'
Ví dụ: s = "Lập trình cùng Python"
66
68
2.1.2 Gán biến đa dòng
<tên biến> = """<xâu>""" hoặc <tên biến> = '''<xâu>'''
Ví dụ: s =
"""Lập trình cùng Python
Gồm các phần:
- Lập trình cơ bản
- Kiểu List
- Kiểu xâu
- …."""
2.2 Truy cập phần tử xâu
Có thể xem xâu là mảng một chiều kiểu ký tự và truy cập như mảng một chiều.
Ví dụ: Xuất ra ký tự thứ 5 trong xâu
Chú ý: Với chuỗi có dấu, mỗi dấu là một ký tự.
Truy cập đến phấn tử âm trong mảng như sau:
67
69
2.3 Một số hàm trong xâu
2.3.1 Hàm len() trong Python
Hàm len dùng để lấy chiều dài của xâu
Cú pháp:
len(<xâu>)
Ví dụ:
2.3.2 Hàm strip() trong Python:
Phương thức strip() loại bỏ bất kỳ khoảng trắng từ đầu hoặc cuối cùng trong
Python
Cú pháp:
68
70
<xâu>.strip()
Ví dụ:
2.3.3 Hàm lower() trong Python:
Phương thức lower() trả về ký tự thường trong xâu
Cú pháp:
<xâu>.lower()
Ví dụ:
2.3.4 Hàm upper() trong Python:
Phương thức upper() trả về ký tự thường trong xâu
Cú pháp:
69
71
<xâu>.upper()
Ví dụ:
2.3.5 Hàm replace()
Phương thức replace() thay thế một ký tự này bằng một ký tự khác trong chuỗi
Cú pháp:
<xâu>.replace(<Ký tự trong xâu>,<Ký tự thay thế>)
Ví dụ:
2.3.6 Hàm split()
Phương thức split() tách chuỗi thành các chuỗi con theo ký tự quy định.
Cú pháp:
70
72
<xâu>.split(<Ký tự quy định cắt>)
Chú ý: Nếu không ghi ký tự quy định cắt thì mặc định là khoảng trắng.
Ví dụ:
2.3.7 Nối chuỗi trong Python
Nối chuỗi trong Python sử dụng “+”
Ví dụ:
2.3.8 Hàm capitalize() trong Python
Phương thức capitalize() để viết chữ hoa chữ cái đầu tiên của xâu
Cú pháp:
<xau>.capitalize()
Ví dụ:
71
73
2.3.9 Hàm count() trong Python
Phương thức count() trong Python trả về số lần xuất hiện của chuỗi con trong
khoảng [start, end]. Đếm xem chuỗi str này xuất hiện bao nhiêu lần trong chuỗi string
hoặc chuỗi con của string nếu bạn cung cấp chỉ mục ban đầu start và chỉ mục kết thúc
end.
Cú pháp:
<xâu>.count(<Xau tìm kiếm>,start,end)
Ví dụ:
2.3.10 Hàm tìm kiếm trong Python
2.3.10.1 Hàm find() trong Python
Phương thức find() dùng để tìm trong xâu đã cho có xâu cần tìm hay không và trả
về chỉ số của ký tự đầu tiên trong xâu đã cho.
72
74
Chú pháp:
<xâu>.find(str,start,end)
Ví dụ:
Nếu str không có trong xâu sẽ trả về -1
2.3.10.2 Hàm index() trong Python
Phương thức index() trả về chỉ số xâu cần tìm trong xâu đã cho
Cú pháp:
<xâu>.index(str,start,end)
Ví dụ:
73
75
Nếu xâu không có sẽ báo lỗi, vì thế chúng ta nên sử dụng hàm find
Đây là điểm khác biệt giữa hàm find và hàm index
2.3.10.3 Hàm rfind() trong Python
Phương thức rfind() dùng để tìm trong xâu đã cho có xâu cần tìm hay không và trả
về chỉ số cuối cùng được tìm thấy.
Chú pháp:
<xâu>.rfind(str,start,end)
Ví dụ:
74
76
Là chỉ số ký tự đầu tiên của chữ “cung” cuối cùng
2.3.11 Hàm kiểm tra trong xâu
2.3.11.1 Hàm isalnum() trong Python
Phương thức dùng để kiểm tra trong xâu có đúng chỉ chữ theo ASCII và số.
Cú pháp:
<xâu>.isalmun()
Ví dụ:
Các trường hợp trả về giá trị False như sau:
75
77
Sai vì có khoảng trắng
Sai vì có dấu không phải theo mã ASCII
76
78
Sai vì có ký tự đặc biệt
2.3.11.2 Hàm isalpha() trong Python
Phương thức isalpha() trong Python trả về giá trị True khi chuỗi có toàn bộ là ký
tự.
Cú pháp:
<xâu>.isalpha()
Ví dụ:
Các trường hợp sai:
77
79
Sai vì có dấu cách.
Sai vì có số
78
80
Sai vì có ký tự đặc biệt
2.3.11.2 Hàm isdigit() trong Python
Phương thức isalpha() trong Python trả về giá trị True khi chuỗi có toàn bộ là số.
Cú pháp:
<xâu>.isdigit()
Ví dụ:
Các trường hợp sai tương tự như isalpha
2.3.11.3 Hàm islower()
Phương thức islower trả về kết quả True khi xâu toàn bộ ký tự thường và khoảng
trắng.
79
81
Cú pháp:
<xâu>.islower()
Ví dụ:
Các trường hợp sai tương tự như isalpha
2.3.11.3 Hàm isupper()
Phương thức isupper trả về kết quả True khi xâu toàn bộ ký tự hoa và khoảng
trắng.
Cú pháp:
<xâu>.isupper()
Ví dụ:
Các trường hợp sai tương tự như isalpha
80
82
2.3.11.4 Hàm isnumeric()
Phương thức isnumeric() trả về kết quả True khi xâu dạng Unicode toàn bộ là số
và khoảng trắng.
Cú pháp:
<xâu>.isnumeric()
Ví dụ:
4 Một số bài tập mẫu:
Bài 1: Nhập vào một xâu. Đảo ngược xâu đó.
Bài 2: Nhập vào một xâu, và đếm xâu đó có bao nhiêu chữ cái, bao nhiêu chữ số và bao
nhiêu ký tự khác chữ và số.
81
83
5 Bài tập tự giải
1. Đếm số lần xuất hiện của 1 kí tự nào đó trong xâu.
2. Liệt kê các kí tự có mặt trong xâu cùng số lần xuất hiện của các kí tự đó.
3. Xét xem trong xâu có K kí tự kề nhau mà như nhau hay không?
4. Hãy xóa đi kí tự kề nhau mà như nhau, chỉ giữ lại một.
5. Kiểm tra tính đối xứng của xâu.
6. Tính xem trong xâu đó có bao nhiêu loại kí tự khác nhau ( không phân biệt in hoa hay in
thường và có phân biệt). a= 97, A=65, 0=48
7. Số lượng các kí tự số.
8. Số lượng các kí tự chữ cái.
9. Viết chương trình tách các phần là số của xâu trên và đưa ra 1 mảng số nguyên.
10. Biến đổi thành chữ in hoa hoặc thường.
11. In ra chuỗi ngược.
12. Nhập vào danh sách HS 1 lớp. Sắp xếp lại danh sắp theo thứ tự tăng dần theo chiều dài
của tên.
13. Nhập vào họ tên bất kì sau đó biến đổi các chữ cái đầu tiên là in hoa.
14. Nhập vào 1 đoạn văn. Tính số câu.
15. Nhập vào 1 số, xóa bỏ các chữ số lẻ. Xuất kết quả dưới dạng đối xứng của phần còn lại.
16. Nhập chuỗi gồm cả chữ và số. Xuất ra màn hình các số riêng và các chữ riêng. Hãy đếm
số lần xuất hiện của mỗi chữ, mỗi số.
17. Nhập 1 xâu kí tự và bỏ đi tất cả các khoảng trống bên trái của nó.
82
84
CHƯƠNG V. TỆP VÀ THAO TÁC VỚI TỆP
➢Vai trò và các đặc điểm của kiểu dữ liệu tệp;
➢Thao tác với tệp văn bản.
Chương trình
Bộ nhớ ngoài
Dữ liệu kiểu tệp
83
85
14. KIỂU DỮ LIỆU TỆP
1. Vai trò kiểu tệp
Tất cả các dữ liệu có các kiểu dữ liệu đã xét đều được lưu trữ ở bộ nhớ trong (RAM) và do
đó dữ liệu sẽ bị mất khi tắt máy. Với một số bài toán, dữ liệu cần được lưu trữ để xử lí nhiều
lần và với khối lượng lớn cần có kiểu dữ liệu tệp (file).
Kiểu dữ liệu tệp có những đặc điểm sau:
•Được lưu trữ lâu dài ở bộ nhớ ngoài (đĩa từ, CD,…) và không bị mất khi tắt
nguồn điện;
•Lượng thông tin lưu trữ trên tệp có thể rất lớn và chỉ phụ thuộc vào dung lượng đĩa.
2. Phân loại tệp và thao tác với tệp
Xét theo cách tổ chức dữ liệu, có thể phân tệp thành hai loại:
•Tệp văn bản là tệp mà dữ liệu được ghi dưới dạng các kí tự theo mã ASCII. Trong
tệp văn bản, dãy kí tự kết thúc bởi nhóm kí tự xuống dòng hay kí tự kết thúc tệp.
Các dữ liệu dạng văn bản như sách, tài liệu, bài học, giáo án, các chương trình
nguồn viết bằng ngôn ngữ bậc cao,... thường được lưu trữ dưới dạng tệp văn bản.
•Tệp có cấu trúc là tệp chứa dữ liệu được tổ chức theo một cách thức nhất định. Dữ
liệu ảnh, âm thanh,... thường được lưu trữ dưới dạng tệp có cấu trúc.
Xét theo cách thức truy cập, có thể phân tệp thành hai loại:
•Tệp truy cập tuần tự cho phép truy cập đến một dữ liệu nào đó trong tệp chỉ bằng
cách bắt đầu từ đầu tệp và đi qua lần lượt tất cả các dữ liệu trước nó.
•Tệp truy cập trực tiếp cho phép tham chiếu đến dữ liệu cần truy cập bằng cách xác
định trựctiếp vị trí (thường là số hiệu) của dữ liệu đó.
Khác với List, số lượng phần tử của tệp không xác định trước.
Hai thao tác cơ bản đối với tệp là ghi dữ liệu vào tệp và đọc dữ liệu từ tệp.
Thao tác đọc/ghi với tệp được thực hiện với từng phần tử của tệp.
Để có thể thao tác với kiểu dữ liệu tệp, người lập trình cần tìm hiểu cách thức mà ngôn ngữ
lập trình cung cấp cách:
•Khai báo biến tệp;
•Mở tệp;
•Đọc/ghi dữ liệu;
•Đóng tệp.
15. THAO TÁC VỚI TỆP
Trong mục này ta chỉ xét cách khai báo, thao tác với tệp văn bản trong Python.
1. Thao tác với tệp
a) Mở tệp
Để có thể đọc và ghi một file thì mở file là công việc đầu tiên. Python cho phép
chúng ta thực hiện điều đó với hàm open.
Cú pháp
open(fileName, mode)
84
86
Trong đó
•fileName là tên của tập tin cần mở.
•mode quy định cách thức mà tập tin. Khi mode bị bỏ qua thì mặc định sẽ là ký tự 'r'.
Ta có các mô tả mode sau:
Mode
Mô tả
R
Mở file chỉ để đọc.
r+
Mở file để đọc và ghi.
W
Tạo một file mới để ghi, nếu file đã tồn tại thì sẽ bị ghi mới.
w+
Tạo một file mới để đọc và ghi, nếu file tồn tại thì sẽ bị ghi mới.
A
Mở file để ghi thêm vào cuối file, nếu không tìm thấy file sẽ tạo mới một file để
ghi mới.
a+
Mở file để đọc và ghi thêm vào cuối file, nếu không tìm thấy file sẽ tạo mới một
file để đọc và ghi mới.
Ví dụ
Lưu file không dấu:
Thủ tục mở tệp để ghi mới dữ liệu có dạng:
<tên biến> = open(<tên tệp>,'w')
Thủ tục mở tệp để ghi nối đuôi dữ liệu có dạng:
<tên biến> = open(<tên tệp>,'a')
Lưu file có dấu:
Thủ tục mở tệp để ghi mới dữ liệu có dạng:
<tên biến> = open(<tên tệp>,'w',encoding = 'utf-8')
Thủ tục mở tệp để ghi nối đuôi dữ liệu có dạng:
<tên biến> = open(<tên tệp>,'a', encoding = 'utf-8')
Tên tệp là một hằng chuỗi
Ví dụ
open('xuat.out','w');
open('caitui.out','a');
Thủ tục mở tệp để đọc dữ liệu có dạng:
Đọc file không dấu:
Thủ tục mở tệp để ghi mới dữ liệu có dạng:
<tên biến> = open(<tên tệp>,'r')
Đọc file có dấu:
Thủ tục mở tệp để ghi mới dữ liệu có dạng:
<tên biến> = open(<tên tệp>,'r',encoding = 'utf-8')
Tên tệp là một hằng chuỗi
Ví dụ
open('xuat.inp','r');
85
87
b) Đọc/ghi tệp văn bản
Ghi tệp văn bản:
<tên biến> .writelines( <Danh sách kết quả>);
Ví dụ:
fo = open('xuat.inp','w',encoding='utf-8')
fo.writelines("công cha như núi Thái Sơn")
fo.close()
Đọc tệp văn bản:
<tên biến>.read([size]);
Phương thức này cho phép ta đọc một lượng dữ liệu tương ứng với size và trả về một
chuỗi. Khi size bị bỏ qua thì toàn bộ nội dung của file sẽ được đọc.
Ví dụ:
fi = open('nhap.inp','r')
n=fi.read();
print(n)
fi.close()
c) Đóng tệp
Sau khi làm việc xong với tệp cần phải đóng tệp. Việc đóng tệp là đặc biệt quan trọng sau
khi ghi dữ liệu, khi đó hệ thống mới thực sự hoàn tất việc ghi dữ liệu ra tệp.
Thủ tục đóng tệp có dạng:
<biến tệp>.close();
Ví dụ
fi.close();
fo.close();
TỔNG KẾT
Một số phương thức làm việc với File trong Python
Có rất nhiều phương thức khác nhau để làm việc với file được tích hợp sẵn trong
Python, trong đó có một vài phương thức đã được Quantrimang tìm hiểu ở trên.
Bảng dưới đây là danh sách đầy đủ các phương thức dưới dạng text, các bạn tham khảo
thêm.
PHƯƠNG THỨC
MÔ TẢ
close()
Đóng một file đang mở. Nó không thực thi được nếu tập
tin đã bị đóng.
fileno()
Trả về một số nguyên mô tả file (file descriptor).
flush()
Xóa sạch bộ nhớ đệm của luồng file.
isatty()
Trả về TRUE nếu file được kết nối với một thiết bị đầu
cuối.
read(n)
Đọc n kí tự trong file.
86
88
readable()
Trả về TRUE nếu file có thể đọc được.
readline(n=-1)
Đọc và trả về một dòng từ file. Đọc nhiều nhất n byte/ký
tự nếu được chỉ định.
readlines(n=-1)
Đọc và trả về một danh sách các dòng từ file. Đọc nhiều
nhất n byte/ký tự nếu được chỉ định.
seek(offset,from=SEEK_SET) Thay đổi vị trí hiện tại bên trong file.
seekable()
Trả về TRUE nếu luồng hỗ trợ truy cập ngẫu nhiên.
tell()
Trả về vị trí hiện tại bên trong file.
truncate(size=None)
Cắt gọn kích cỡ file thành kích cỡ tham số size.
writable()
Trả về TRUE nếu file có thể ghi được.
write(s)
Ghi s kí tự vào trong file và trả về.
writelines(lines)
Ghi một danh sách các dòng vào file.
87
89
16. VÍ DỤ LÀM VIỆC VỚI TỆP
Ví dụ 1
Tính điện trở tương đương.
Cho ba điện trở R1, R2, R3. Sử dụng cả ba điện trở ta có thể tạo ra năm điện trở tương
đương bằng cách mắc các sơ đồ nêu ở hình 17.
Hình 17. Sơ đồ mắc điện trở.
Mỗi cách mắc sẽ cho một điện trở tương đương khác nhau. Ví dụ, nếu mắc theo sơ đồ I thì
điện trở tương đương sẽ là:
R =
Còn nếu mắc theo sơ đồ V thì R = R1 + R2 +R3.
Cho tệp văn bản RESIST.DAT gồm nhiều dòng, mỗi dòng chứa ba số thực R1, R2 và R3,
các số cách nhau một dấu cách, 0 < R1, R2, R3 105.
Chương trình sau đọc dữ liệu từ tệp RESIST.DAT, tính các điện trở tương đương và ghi kết
quả ra tệp văn bản RESIST.EQU, mỗi dòng ghi năm điện trở tương đương của ba điện trở ở
dòng dữ liệu vào tương ứng.
fi = open('nhap.inp','r')
a = []
r=[0]*5
for i in fi:
temp=i.strip()
a=i.split(" ")
fi.close()
r1 = int(a[0])
r2=int(a[1])
r3 = int(a[2])
r[0]=(r1*r2*r3)/(r1*r2+r1*r3+r2*r3)
R1
R2
R3
R1
R2
R3
R1
R2
R3
R1
R3
R2
R3
R2
R1
Sơ đồ I
Sơ đồ II
Sơ đồ III
Sơ đồ IV
Sơ đồ V
3*23*12*1
3*2*1
RRRRRR
RRR
+
+
88
90
r[1]=(r1*r2)/(r1+r2)+r3
r[2]=(r1*r3)+(r1+r3)+r2
r[3]=(r2*r3)/(r2+r3)+r1
r[4]=r1+r2+r3
for i in r:
print('%.2f' % i,end=' ')
Ví dụ 2.
Thầy hiệu trưởng tổ chức cho giáo viên và học sinh của trường đi cắm trại, sinh hoạt
ngoài trời ở vườn quốc gia Bidoup – Núi Bà. Để lên lịch đến thăm khu trại các lớp, thầy
Hiệu trưởng cần biết khoảng cách từ trại của mình (ở vị trí có toạ độ (0;0))đến trại các giáo
viên chủ nhiệm lớp. Mỗi lớp có một khu trại, vị trí trại của mỗi thầy chủ nhiệm đều có tọa
độ nguyên (x;y), được ghi vào tệp văn bản TRAI.INP (như vậy, tệp TRAI.OUT chứa các
cặp số nguyên liên tiếp, các số cách nhau bởi dấu cách và không kết thúc bằng dấu xuống
dòng).
Chương trình sau sẽ đọc từ tệp TRAI.INP các cặp toạ độ, tính và đưa ra màn hình
khoảng cách (với độ chính xác hai chữ số sau dấu chấm thập phân) từ trại mỗi giáo viên chủ
nhiệm lớp đến trại của thầy hiệu trưởng.
fi = open('trai.inp','r')
a = []
for i in fi:
temp=i.strip()
a=i.split(" ")
fi.close()
x=int(a[0])
y=int(a[1])
import math
d=math.sqrt(x*x+y*y)
fo=open("trai.out","w")
fo.write('%.2f' %d)
fo.close()
TÓM TẮT
➢Việc trao đổi dữ liệu với bộ nhớ ngoài được thực hiện thông qua
kiểu dữ liệu tệp;
➢Để có thể làm việc với tệp cần phải khai báo biến tệp;
➢Mỗi ngôn ngữ lập trình đều có các chương trình chuẩn để làm
việc với tệp;
➢Các thao tác với tệp văn bản
CÂU HỎI VÀ BÀI TẬP
1.Nêu một số trường hợp cần phải dùng tệp.
2.Trong sơ đồ thao tác với tệp, khi cần nhập dữ liệu từ tệp phải dùng những thao tác nào?
89
91
3.Tại sao cần phải có câu lệnh mở tệp trước khi đọc/ghi tệp?
4.Tại sao phải dùng câu lệnh đóng tệp sau khi đã kết thúc ghi dữ liệu vào tệp?
90
92
Chương VI. Chương trình con và lập trình có cấu trúc
➢Khái niệm cơ bản của chương trình con;
➢Chương trình con: cấu trúc và phân loại;
➢Tham số hình thức và tham số thực sự;
➢Biến cục bộ, biến toàn cục;
➢Thư viện chương trình.
17. CHƯƠNG TRÌNH CON VÀ PHÂN LOẠI
1. Khái niệm chương trình con
Các chương trình giải các bài toán phức tạp thường rất dài, có thể gồm hàng trăm, hàng
nghìn lệnh. Khi đọc những chương trình dài, rất khó nhận biết được chương trình thực hiện
các công việc gì và việc hiệu chỉnh chương trình cũng khó khăn. Vì vậy, vấn đề đặt ra là
phải cấu tạo chương trình như thế nào để cho chương trình dễ đọc, dễ hiệu chỉnh, nâng cấp.
Mặt khác, việc giải quyết một bài toán phức tạp thường đòi hỏi và nói chung có thể phân
thành các bài toán con.
Xét bài toán tính tổng bốn luỹ thừa:
TLuythua = an + bm + cp+ dq
Bài toán đó bao gồm bốn bài toán con tính an, bm , cp, dq, có thể giao cho bốn người, mỗi
người thực hiện một bài. Giá trị TLuythua là tổng kết quả của bốn bài toán con đó. Với
những bài toán phức tạp hơn, mỗi bài toán con lại có thể được phân chia thành các bài toán
91
93
con nhỏ hơn. Quá trình phân rã làm "mịn" dần bài toán như vậy được gọi là cách thiết kế từ
trên xuống.
Tương tự, khi lập trình để giải bài toán trên máy tính có thể phân chia chương trình (gọi là
chương trình chính) thành các môđun, mỗi khối bao gồm các lệnh giải một bài toán con nào
đó. Mỗi khối lệnh sẽ được xây dựng thành một chương trình con. Sau đó, chương trình
chính sẽ được xây dựng từ các chương trình con này. Có thể xem chương trình con cũng là
một chương trình và nó cũng có thể được xây dựng từ các chương trình con khác.
Cách lập trình như vậy dựa trên phương pháp lập trình có cấu trúc và chương trình được xây
dựng gọi là chương trình có cấu trúc.
Chương trình con là một dãy lệnh mô tả một số thao tác nhất định và có thể được thực hiện
(được gọi) từ nhiều vị trí trong chương trình.
Trong chương trình trên có bốn đoạn lệnh tương tự nhau, việc lặp lại những đoạn
lệnh tương tự nhau làm cho chương trình vừa dài vừa khó theo dõi. Các ngôn ngữ lập trình
bậc cao đều cung cấp khả năng xây dựng chương trình con dạng tổng quát "đại diện" cho
nhiều đoạn lệnh tương tự nhau, chẳng hạn tính luỹ thừa Luythua = xk, trong đó Luythua và x
là giá trị kiểu thực còn k thuộc kiểu nguyên:
luythua=1
for i in range(k) :
luythua*=x;
Ta có thể đặt tên cho chương trình con này là Luythua và tên các biến chứa dữ liệu vào của
nó là x và k. Khi cần tính luỹ thừa của những giá trị cụ thể ta chỉ cần viết tên gọi chương
trình con và thay thế (x, k) bằng giá trị cụ thể tương ứng. Chẳng hạn để tính an, bm, cp, dq ta
viết Luythua(a, n), Luythua(b, m), Luythua(c, p), Luythua(d, q).
Lợi ích của việc sử dụng chương trình con
•Tránh được việc phải viết lặp đi lặp lại cùng một dãy lệnh nào đó tương tự như trong
ví dụ tính TLuythua ở trên. Ngôn ngữ lập trình cho phép tổ chức dãy lệnh đó thành
một chương trình con. Sau đó, mỗi khi chương trình chính cần đến dãy lệnh này chỉ
cần gọi thực hiện chương trình con đó.
•Khi phải viết chương trình lớn hàng nghìn, hàng vạn lệnh, cần huy động nhiều người
tham gia, có thể giao cho mỗi người (hoặc mỗi nhóm) viết một chương trình con, rồi
sau đó lắp ghép chúng lại thành chương trình chính. Ví dụ, với các bài toán mà việc
tổ chức dữ liệu vào và ra không đơn giản thường người ta chia bài toán thành ba bài
toán con như nhập, xử lí và xuất dữ liệu, rồi viết các chương trình con tương ứng.
•Thuận tiện cho phát triển, nâng cấp chương trình. Do chương trình được tạo thành từ
các chương trình con nên chương trình dễ đọc, dễ hiểu, dễ kiểm tra và hiệu chỉnh.
Việc nâng cấp, phát triển chương trình con nào đó, thậm chí bổ sung thêm các
chương trình con mới nói chung không gây ảnh hưởng đến các chương trình con
khác.
•Hiện nay, ngày càng có nhiều thiết bị kĩ thuật số tiện ích như máy quay phim, máy
ảnh, máy ghi âm, các thiết bị âm thanh, màn hình màu độ phân giải cao,... có thể
được kết nối với máy tính. Việc thiết kế những chương trình con thực hiện các giao
tiếp cơ bản với các thiết bị như vậy là rất cần thiết và giúp mở rộng khả năng ứng
dụng của ngôn ngữ.
92
94
2. Phân loại và cấu trúc của chương trình con
a) Phân loại
Trong nhiều ngôn ngữ lập trình, chương trình con thường gồm hai loại:
•Hàm 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ó. Ví dụ hàm toán học hay hàm xử lí chuỗ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 chuỗi x và trả về độ dài của chuỗi x,...
•Thủ tục là chương trình con một số lệnh nhất định nhưng không trả về giá trị nào
qua tên của nó. Ví dụ các thủ tục vào/ra chuẩn.
b) Cấu trúc chương trình con
Chương trình con có cấu trúc tương tự chương trình, nhưng nhất thiết phải có tên và phần
đầu dùng để khai báo tên, nếu là hàm phải khai báo kiểu dữ liệu cho giá trị trả về của hàm:
<phần đầu>
<phần thân>
Phần thân
Phần thân của chương trình con là dãy câu lệnh thực hiện để từ những dữ liệu vào ta nhận
được dữ liệu ra hay kết quả mong muốn.
•Tham số hình thức
Các biến được khai báo cho dữ liệu vào/ra được gọi là tham số hình thức của chương trình
con. Các biến được khai báo để dùng riêng trong chương trình con được gọi là biến cục bộ.
Ví dụ, trong chương trình con Luythua(x, k) ở trên thì x, k là các tham số hình thức và j là
các biến cục bộ.
Nói chung, chương trình chính và các chương trình con khác không thể sử dụng được các
biến cục bộ của một chương trình con nhưng mọi chương trình con đều sử dụng được các
biến của chương trình chính. Do vậy, các biến của chương trình chính được gọi là biến toàn
cục. Ví dụ, biến TLuythua khai báo trong chương trình chính ở ví dụ trên là biến toàn cục.
Một chương trình con thường có thể có hoặc không có tham số hình thức, có thể có hoặc
không có biến cục bộ.
c) Thực hiện chương trình con
•Tham số thực sự
Để thực hiện (gọi) một chương trình con, ta cần phải có lệnh gọi nó tương tự lệnh gọi hàm
hay thủ tục chuẩn, bao gồm tên chương trình con với tham số (nếu có) là các hằng và biến
chứa dữ liệu vào và ra tương ứng với các tham số hình thức đặt trong cặp ngoặc ( và ). Các
hằng và biến này được gọi là các tham số thực sự.
Ví dụ
sqr(225)
Khi thực hiện chương trình con, các tham số hình thức để nhập dữ liệu vào sẽ nhận giá trị
của tham số thực sự tương ứng, còn các tham số hình thức để lưu trữ dữ liệu ra sẽ trả giá trị
đó cho tham số thực sự tương ứng.
Tên chương trình con
Tham số thực sự
93
95
Ví dụ, khi thực hiện tính TLuythua cần bốn lần gọi chương trình con Luythua(x, k) với các
tham số (a, n), (b, m), (c, p), (d, q) và các tham số này là tham số thực sự tương ứng với
tham số hình thức (x, k).
Sau khi chương trình con kết thúc, lệnh tiếp theo lệnh gọi chương trình con sẽ được thực
hiện.
18. VÍ DỤ VỀ CÁCH VIẾT VÀ SỬ DỤNG
CHƯƠNG TRÌNH CON
Các ngôn ngữ lập trình đều có các quy tắc viết và sử dụng chương trình con. Trong mục này
sẽ xét cách viết và sử dụng chương trình con trong Python.
1. Cách viết và sử dụng chương trình con
Xét ví dụ vẽ hình chữ nhật có dạng sau:
* * * * * * *
* *
* * * * * * *
Ta có thể vẽ hình chữ nhật trên với ba câu lệnh:
print("**********")
print("* *")
print("**********")
Như vậy, trong một chương trình, mỗi khi cần vẽ một hình chữ nhật như trên cần phải đưa
vào ba câu lệnh này.
Trong chương trình sau, ta đưa ba câu lệnh trên vào một thủ tục có tên là Ve_Hcn (vẽ hình
chữ nhật). Mỗi khi cần vẽ một hình chữ nhật ta cần đưa vào một câu lệnh gọi thủ tục đó.
Chương trình gọi thủ tục Ve_Hcn ba lần để vẽ ba hình chữ nhật.
def VeHCN():
print("**********")
print("* *")
print("**********")
VeHCN();
a) Cấu trúc
Thủ tục có cấu trúc như sau:
def <tên thủ tục>([<danh sách tham số>]) :
[<dãy các lệnh>]
Chú ý: Đối với hàm cuối chương trình con phải có return để tra về giá trị của hàm
Đầu thủ tục gồm tên dành riêng def, tiếp theo là tên chương trình con. Danh sách tham số có
thể có hoặc không có.
94
96
Phần khai báo dùng để xác định các hằng, kiểu, biến và cũng có thể xác định các chương
trình con khác được sử dụng trong chương trình con. Chương trình con Ve_Hcnở trên
không khai báo hằng, biến hay chương trình con nào.
Khi cần thực hiện, ta phải viết lệnh gọi chương trình con tương tự như các chương trình con
chuẩn.
b) Ví dụ về chương trình con
Chương trình con Ve_Hcn trong ví dụ trên chỉ vẽ được hình chữ nhật với kích thước cố định
là 73. Giả sử chương trình cần vẽ nhiều hình chữ nhật với kích thước khác nhau. Để
chương trình con Ve_Hcn có thể thực hiện được điều đó, cần có hai tham số cho dữ liệu vào
là chiều dài, chiều rộng và đầu của chương trình con được viết như sau:
def Ve_Hcn(chdai, chrong)
Khai báo này có nghĩa chương trình con Ve_Hcn sẽ được thực hiện để vẽ hình chữ nhật có
kích thước tuỳ theo giá trị của các tham số chdai, chrong..
Trong chương trình sau đây mô tả đầy đủ chương trình con Ve_Hcn với các tham số chdai,
chrong và sử dụng chương trình con này để vẽ các hình chữ nhật có kích thước khác nhau.
def VeHCN(chdai, chrong):
for i in range(chdai):
print("*",end='')
print()
for i in range(chrong-2):
print("*",end='')
for i in range(chdai-2):
print(" ",end='')
print("*")
for i in range(chdai):
print("*",end='')
VeHCN(5,3);
Ví dụ, chương trình con Hoan_doi trong chương trình python cho hai biến.
def swap(a,b):
return (b,a)
a=5
b=7
a,b = swap(a,b)
print(a," ",b)
95
97
BÀI TẬP VÀ THỰC HÀNH 6
1. Mục đích, yêu cầu
•Rèn luyện các thao tác xử lí chuỗi, kĩ năng tạo hiệu ứng chữ chạy trên màn hình;
•Nâng cao kĩ năng viết, sử dụng chương trình con.
2. Nội dung
a)Trước hết, hãy tìm hiểu việc xây dựng hai chương trình con sau đây:
•Chương trình con CatDan(S1) nhận đầu vào là chuỗi S1 gồm không quá 79 kí tự, tạo
chuỗi S2 thu được từ chuỗi S1 bằng việc chuyển kí tự đầu tiên của nó xuống vị trí
cuối cùng. Ví dụ nếu S1 = 'abcd' thì S2 = 'bcda'.
def CatDan(s1):
return s1[::-1]
s1="Tin hoc"
s2 = CatDan(s1)
print(s2)
Bài tập tự giải: Chương trình con CanGiua(s) nhận đầu vào là chuỗi s gồm không
quá 79 kí tự, bổ sung vào đầu s một số dấu cách để khi đưa ra màn hình chuỗi kí tự
trong s ban đầu được căn giữa dòng gồm 80 kí tự.
96
98
BÀI TẬP VÀ THỰC HÀNH 7
1. Mục đích, yêu cầu
•Nâng cao kĩ năng viết, sử dụng chương trình con;
•Biết cách viết một chương trình có cấu trúc để giải một bài toán trên máy tính.
2. Nội dung
a)Tìm hiểu việc xây dựng các hàm và chương trình con thực hiện tính độ dài các cạnh, chu
vi, diện tích, kiểm tra các tính chất đều, cân, vuông của tam giác được trình bày dưới
đây. Giả thiết tam giác được xác định bởi toạ độ của ba đỉnh.
b)Tìm hiểu chương trình nhập vào toạ độ ba đỉnh một tam giác và sử dụng các hàm,
chương trình con được xây dựng dưới đây để khảo sát các tính chất của tam giác.
c)Viết chương trình sử dụng các hàm và chương trình con xây dựng ở trên để giải bài
toán:
Cho tệp dữ liệu TAMGIAC.INP có cấu trúc như sau:
•Dòng đầu tiên chứa số N;
•N dòng tiếp theo, mỗi dòng chứa sáu số thực xA, yA, xB, yB, xC, yC là toạ độ ba đỉnh
A(xA, yA), B(xB, yB), C(xC, yC) của tam giác ABC.
Hãy nhập dữ liệu từ tệp đã cho, đưa ra tệp TAMGIAC.OUT gồm ba dòng:
•Dòng đầu tiên là số lượng tam giác đều;
•Dòng thứ hai là số lượng tam giác cân (nhưng không là đều);
•Dòng thứ ba là số lượng tam giác vuông.
TÓM TẮT
➢Chương trình con đóng vai trò quan trọng trong lập trình, đặc biệt
trong lập trình có cấu trúc.
➢Dùng chương trình con sẽ thuận lợi cho việc tổ chức, viết, kiểm
tra chương trình và sử dụng lại.
➢Chương trình con có phần đầu, phần khai báo và phần thân.
➢Chương trình con có thể có tham số hình thức khi khai báo và
được thay bằng tham số thực sự khi gọi. Các tham số hình thức
và thực sự phải tương ứng về thứ tự và kiểu dữ liệu.
➢Gọi chương trình con bằng tên của nó.
➢Biến được khai báo trong chương trình con là biến cục bộ.
➢Thư viện cung cấp những chương trình con chuẩn mở rộng khả
97
99
năng ứng dụng.
CÂU HỎI VÀ BÀI TẬP
1.Hãy nêu sự giống nhau và khác nhau giữa chương trình con và hàm.
2.Chương trình con có thể không có tham số được không? Cho ví dụ.
3.Hãy cho ví dụ chương trình con có nhiều hơn một kết quả ra.
4.Viết chương trình con (hàm, chương trình con) tính bội số chung nhỏ nhất của hai số
nguyên dương a, b. Hãy cho biết trong trường hợp này viết chương trình con dưới dạng
hàm hay chương trình con là thuận tiện hơn. Vì sao?
3
Năm 2021
Show answer
Auto Play
Slide 1 / 97
SLIDE
Similar Resources on Wayground
100 questions
HỆ THỐNG TRỊ LIỆU MỚI - T KHOA
Lesson
•
University
88 questions
TÍNH CHẤT VẬT LÍ VÀ HOÁ HỌC ĐƠN CHẤT HALOGEN
Lesson
•
10th Grade
87 questions
Bài học không có tiêu đề
Lesson
•
Professional Development
102 questions
B1 - LESSON 2 - MY HOMETOWN, MY PRIDE
Lesson
•
University
87 questions
Bộ câu hỏi Kinh thánh- Giáo xứ Lảnh Trì
Lesson
•
KG
89 questions
DƯỢC LIỆU 2
Lesson
•
University
90 questions
Hóa sinh sinh dục
Lesson
•
University
100 questions
TRIET1 50 CÂU
Lesson
•
KG - University
Popular Resources on Wayground
8 questions
Spartan Way - Classroom Responsible
Quiz
•
9th - 12th Grade
15 questions
Fractions on a Number Line
Quiz
•
3rd Grade
14 questions
Boundaries & Healthy Relationships
Lesson
•
6th - 8th Grade
20 questions
Equivalent Fractions
Quiz
•
3rd Grade
3 questions
Integrity and Your Health
Lesson
•
6th - 8th Grade
25 questions
Multiplication Facts
Quiz
•
5th Grade
9 questions
FOREST Perception
Lesson
•
KG
20 questions
Main Idea and Details
Quiz
•
5th Grade
Discover more resources for Information Technology (IT)
8 questions
Spartan Way - Classroom Responsible
Quiz
•
9th - 12th Grade
22 questions
El Imperfecto
Quiz
•
9th - 12th Grade
25 questions
Logos
Quiz
•
12th Grade
20 questions
Grammar
Quiz
•
9th - 12th Grade
18 questions
Mendelian Genetics
Quiz
•
10th - 12th Grade
22 questions
Regular Preterite -AR-ER-IR-
Quiz
•
12th Grade
20 questions
verbos reflexivos en español
Quiz
•
9th - 12th Grade
14 questions
Making Inferences From Samples
Quiz
•
7th - 12th Grade