Professional Documents
Culture Documents
Các bài tập trên cần được chạy trong các chế độ màn hình khác nhau (BW40, BW80,
CO40, CO80). Chú ý sự sai biệt về số dòng màn hình văn bản trên lý thuyết và màn
hình văn bản giả lập bởi Window. Sinh viên bổ sung thêm thủ tục READLN (để dừng
màn hình kết xuất, chờ gỏ phím ENTER), tuy nhiên trước đó nên hướng dẫn sinh viên
dùng tổ hợp phím ALT-F5 để chuyển qua lại giữa giao diện của Pascal và màn hình
kết xuất.
1
BÀI TẬP MÔN: NGÔN NGỮ LẬP TRÌNH (PASCAL) (Bài 2 – 3 tiết)
Các thủ tục/hàm đã học:
Textmode(), Textcolor(), TextBackGround(), Clrscr, Gotoxy(), Readkey.
Write(), Writeln(), Read(), Readln(), Randomize, Random().
Các kiểu dữ liệu đã học:
Byte, ShortInt, Word, Integer, Longint. Real. Char. Boolean
2
BÀI TẬP MÔN: NGÔN NGỮ LẬP TRÌNH (PASCAL)
(Kể từ bài tập này sinh viên cần lần lượt giải quyết các bài tập
theo tiến độ học lý thuyết – không đặt mốc thời gian nữa.
Cố gắng giải quyết xong các bài tập trước khi thi kết thúc học phần)
1. DÙNG CẤU TRÚC CASE: Qui tắc gọi một năm, ngày, giờ âm lịch như sau:
Âm lịch tính theo can chi. Có 10 can là Giáp, At, Bính, Đinh, Mậu, Kỷ, Canh,
Tân, Nhâm, Quí. Có 12 chi là Tí, Sửu, Dần, Mẹo, Thìn, Tỵ, Ngọ, Mùi, Thân,
Dậu, Tuất, Hợi. Cứ mỗi đơn vị thời gian trôi qua thì chuyển qua một can và
một chi mới theo như thứ tự đã liệt kê. Ví dụ năm 1968 là năm Mậu Thân thì
năm 1970 là năm Kỷ Dậu. Dương lịch gọi năm theo số nguyên bắt đầu từ năm
1 (trước công nguyên hoặc sau công nguyên), không có năm 0. Viết chương
trình nhập một năm dương lịch từ bàn phím, kết xuất ra màn hình tên năm âm
lịch tương ứng.
2. DÙNG VÒNG LẶP FOR: Viết chương trình nhập 10 số nguyên không âm từ
bàn phím. Xuất ra màn hình tổng các số đó, số lớn nhất, số nhỏ nhất, số các số
chẵn,số các số lẻ.
3. DÙNG VÒNG LẶP FOR VÀ VÒNG LẶP REPEAT: Viết chương trình nhập
10 số nguyên lớn hơn 100 từ bàn phím, có kiểm tra dữ liệu nhập (bắt buộc
nhập lại tại vị trí nhập trước đó nếu nhập sai). Xuất ra màn hình tổng các số
đó, số lớn nhất, số nhỏ nhất, số các số chẵn,số các số lẻ.
4. DÙNG VÒNG LẶP WHILE: Viết chương trình nhập vào các số nguyên từ
bàn phím, có kiểm tra dữ liệu nhập (bắt buộc nhập lại tại vị trí nhập trước đó
nếu nhập sai), chấm dứt nhập bằng cách nhập số không. Xuất ra màn hình tổng
các số đó, số lớn nhất, số nhỏ nhất, số các số chẵn,số các số lẻ (trừ số 0).
5. PHỐI HỢP CÁC CẤU TRÚC ĐIỀU KHIỂN VÀ TÍNH TOÁN CÁC VỊ TRÍ
KẾT XUẤT:
a) Viết chương trình xuất ra màn hình bảng cửu chương từ bảng nhân 2 đến
bảng nhân 9.
b) Viết chương trình nhập vào tọa độ góc trên trái và tọa độ góc dưới phải của
một hình chữ nhật. Xuất hình chữ nhật đó ra màn hình.
6. SỬ DỤNG THỦ TỤC VÀ HÀM:
a) Viết chương trình nhập vào chiều cao lá phướng, xuất ra ngay giữa màn
hình lá phướng dạng sau đây:
xxxxxx+
xxxxx++
xxxx+++
xxx++++
xx+++++
x++++++
+++++++
b) Viết chương trình xuất ra màn hình N hình chữ nhật (N nhập từ bàn phím)
tại các vị trí ngẫu nhiên.
7. XÂY DỰNG CÁC UNIT: Sau khi thực hiện xong bài tập trên đây thì đưa tất
cả các Procedure và Function đó vào một unit tên là My_Unit. Biên dịch Unit
đó thành My_Unit.TPU để còn gọi dùng lại về sau.
3
8. SỬ DỤNG ĐỆ QUI:
a) Viết chương trình nhập vào một số nguyên không âm. Xuất ra màn hình kết
quả phân tích số đó thành tổng các số Fibonacci.
b) Viết chương trình tính toán ước số chung lớn nhất và bội số chung nhỏ nhất
của hai số nguyên không âm (sử dụng đệ qui)
CHUỖI VÀ MẢNG:
9. Viết chương trình nhập một xâu kí tự (chuỗi) S chỉ gồm các chữ cái thường
(không hoa) trong bảng mẫu tự. Hãy lập ra xâu S1 nhận được từ S bằng cách
sắp xếp lại các kí tự theo vần a, b, c.
13. Viết chương trình nhập vào một chuỗi và một kí tự. Thông báo ra màn hình số
kí tự này có trong chuỗi. Kết quả trên màn hình có dạng:
4
Kí tự: d Kết quả: Không có chữ ‘d’ nào.
Tiếp tuc (Y/N): N
14. Viết chương trình cho phép nhập vào một chuỗi và thông báo cho người dùng
biết chuỗi chứa gồm bao nhiêu chữ cái ‘A’, chữ cái ‘B’, .v.v. Kết quả trên
màn hình có dạng:
1
Bài/câu có dấu (*) là không bắt buộc. Chỉ dành cho sinh viên có năng lực toán
học tốt.
5
21. Viết chương trình cho phép đọc vào một file văn bản. Với mỗi dòng (chuỗi)
của file văn bản này thực hiện các công việc sau:
TYPE
Nhansu = RECORD
Hoten: string;
Tuoi:byte;
CoQuan:String;
Luong:longint;
HonPhoi:Boolean;
End;
Chương trình cho phép:
a) Tạo file.
b) Xem file.
c) Thêm vào file một phần tử
d) Xóa khỏi file một phần tử.
e) Duyệt file để trả lời cho biết các thông tin cần biết về Luong hoặc
HonPhoi.
23. Viết chương trình :
a) Tạo một danh sách (list) có chiều dài có thể tùy ý chứa các Record
Ptu = Record
St:string;
Num:byte;
End;
b) Chứa các thủ tục: Xóa/Thêm một phần tử vào danh sách có sẳn.
c) Chèn một danh sách vào một danh sách đã có.
d) Sắp xếp danh sách theo giá trị của Num từ lớn đến nhỏ .
24. Dựa vào bài 8, viếp một chương trình cho phép nhập vào một đa thức không
giới hạn bậc. Sau đó cho phép Đơn giản đa thức, Cộng/Trừ/Nhân hai đa thức.
6
25. (*)Như bài 24. Viết thêm phần chia một đa thức cho một nhị thức bậc nhất
(bằng cách vận dụng sơ đồ Hörner).
TYPE
str20=string [20];
str40=string [40];
Hocvien= record
Hoten:str20;
Tuoi:1..120;
Phai:boolean;
CQCQ:str40; {Cơ quan chủ quản}
End;
HVF=File of Hocvien;
Viết và tổ chức chương trình dưới dạng một menu cho phép:
a. Nhập dữ liệu về học viên và lưu trữ dữ liệu đó trên đĩa.
b. Truy cập và cập nhật thông tin về học viên đã cất trên đĩa.
c. Sắp xếp lại các thông tin về học viên theo từng tiêu chí (khoá sắp
xếp – ví dụ: xếp theo tên/ xếp theo tuổi) và ghi lại thành các file dữ
liệu đã được sắp xếp.
d. Tim kiếm và in thông tin về một học viên đã có trên đĩa ra màn
hình và ra máy in.2
e. In ra màn hình hoặc máy in thông tin về học viên theo một tiêu chí
chọn lựa nào đó. (Ví dụ thông tin về học viên theo CQCQ, theo độ
tuổi).
27. Viết chương trình cho phép mô phỏng lệnh COPY CON của DOS (chú ý thực
hiện tham số dòng lệnh y như trong môi trường DOS).
28. Viết chương trình cho phép mô phỏng lệnh TYPE của DOS (chú ý thực hiện
tham số dòng lệnh y như trong môi trường DOS).
29. Viết chương trình mô phỏng tiện ích File Split / Merge của NC.
30. Viết chương trình mô phỏng lệnh REN của DOS (chú ý thực hiện tham số
dòng lệnh y như trong môi trường DOS).
31. Viết chương trình mô phỏng lệnh COPYcủa DOS (chú ý thực hiện tham số
dòng lệnh y như trong môi trường DOS).
32. Viết chương trình mô phỏng lệnh DEL của DOS (chú ý thực hiện tham số
dòng lệnh y như trong môi trường DOS).
33. Mô phỏng chức năng Change Case của MicroSoft Word: Viết chương trình
cho phép đọc một file văn bản (A) và SAVE lại file đó với một tên khác (B)
với nội dung gồm tất cả dòng của file (A) đã được chuẩn hóa thành dạng Title
Case
2
Lưu ý: Unit Printer của Turbo Pascal chỉ hỗ trợ xuất ra máy in qua cổng LPT1
(DB25 connector), không thực hiện được với các máy in hiện nay dùng kết nối
qua cổng USB.
7
(Nếu file A có dòng: ‘DAY la dONG troNG File‘
thì dòng tương ứng trong file (B) là: ‘Day La Dong Trong File‘)
TYPE
Hoso = DataType; {Ở đây DataType là một kiểu dữ liệu trừu tượng nào đó do
sinh viên tự khai báo}
DataPtr = ^Node;
Node = Record
Data : Hoso;
Next : DataPtr;
End;
VAR
NhanVien,Tam:DataPtr;
a) Viết các thủ tục để tạo một danh sách liên kết (linked list). Trong danh
sách này mỗi nút (node) bao gồm hai field: một field có dữ liệu kiểu
DataType, field kia là một con trỏ trỏ đến nút kế tiếp. Hãy tạo ra danh sách
này bằng hai cách sao cho có thể xử lí được: 1) Theo kiểu LIFO (Last In
First Out). 2) Theo kiểu FIFO (First In First Out).
b) Viết các thủ tục cho phép đếm số nút / xoá một nút / thêm một nút vào
danh sách liên kết hiện có.
c) Viết các thủ tục cho phép nối hai danh sách liên kết với nhau bằng cách
cho con trỏ của nút cuối cùng của danh sách này chỉ đến nút đầu tiên của
danh sách kia.
d) Viết thủ tục cho phép trộn hai danh sách liên kết hiện có: Danh sách mới
gồm xen kẻ một nút của danh sách này rồi một nút của danh sách kia (Nếu
một trong hai danh sách ngắn hơn danh sách kia thì sau khi đã dùng hết các
nút của danh sách ngắn hơn trong xen kẻ thì phần còn lại chỉ gồm các nút
còn lại của danh sách dài hơn)