You are on page 1of 196

Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.

com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

Sinh viên: Trương Đức Khiêm


Lớp: Tin 4B
Phương pháp giải bài tập Tin học
 Bài tập 3.34 trang 24 sách Bài tập tin học 11.
 Bài tập 5.9 trang 59 sách Bài tập tin học 11.
I. Bài tập 3.34:
1. Tìm hiểu đề bài:
 Dữ liệu vào: Không có.
 Dữ liệu ra: Tệp văn bản FIBO.DAT gồm 45 dòng. Mỗi dòng là một số Fibonaccy.
2. Xây dựng ý tưởng giải thuật:
 Sử dụng vòng lặp While… Do
 Sơ đồ khối của thuật toán:

3. Trình bày lời giải:

- Trang 1 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

4. Mở rộng bài toán: Không có. {Do đến chương này học sinh mới chỉ được học những
câu lệnh cơ bản.}
II. Bài tập 5.9:
1. Tìm hiểu đề bài:
 Dữ liệu vào: Số n là số tháng mà đoàn thám hiểm quay lại đảo.
 Dữ liệu ra: Số thỏ trên đảo sau n tháng.
2. Xây dựng ý tưởng giải thuật: Dựa vào tính chất của dãy số Fibonacci.
 Sử dụng vòng lặp While… Do
 Sơ đồ thuật toán:

3. Trình bày lời giải:

- Trang 2 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

- Trang 3 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
4. Nghiên cứu về lời giải và mở rộng bài toán:
4.1. Chương trình chỉ xác định được số thỏ trong vòng 45 tháng.
4.2. Về lời giải trong sách bài tập: Thiếu chính xác! Lí do, trong lời giải khai báo kiểu
phần tử của số Fibonaccy là Integer, nhưng phần tử thứ 24 của dãy số Fibonaccy có
giá trị là 46368 đã vượt quá miền trị của kiểu Integer là . Cho nên, nếu
nhập vào số tháng lớn hơn 23 thì sẽ cho kết quả 9489.
4.3. Mở rộng bài toán: Cho số tự nhiên N và dãy số Fibonaccy: 1, 1, 2, 3, 5,
8, ...Hãy viết chương trình kiểm tra xem N có thể biểu diễn thành tổng của của các số
Fibonaccy khác nhau hay không?
 Cách giải: Ta sẽ tìm số Fibonaccy gần với số N nhất. Đây sẽ chính là số hạng đầu
tiên nằm trong dãy kết quả. Sau đó, lấy hiệu của số N và số Fibonaccy gần với số N
nhất, tiếp tục tìm số Fibonaccy gần với hiệu trên và cứ thế cho đến khi hiệu đó là một
số Fibonaccy. Kết quả các số Fibonaccy sẽ được liệt kê theo thứ tự từ lớn đến nhỏ.

- Trang 4 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Sinh viên: Lê Thị Châu Long
Lớp: Tin 4B

 Bài tập 3.38 trang 26 sách Bài tập tin học 11.
 Bài tập 5.11 trang 57 sách Bài tập tin học 11.

I. Bài 3.38:
Lập trình:
 Nhập từ bàn phím số thực a.

 Tìm và đưa ra màn hình số nguyên dương N nhỏ nhất thõa mãn
1. Tìm hiểu đề bài:
 Input: Số thực A.

 Output: Số nguyên N nhỏ nhất thõa mãn


2. Ý tưởng giải thuật:

3. Trình bày lời giải

- Trang 5 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

4. Mở rộng bài toán:


Lập trình:
 Nhập từ bàn phím số thực a.

 Tìm và đưa ra màn hình số nguyên dương N lớn nhất thõa mãn

II. Bài 5.11:


Cho tệp LINE.TXT, mỗi dòng không chứa một xâu không quá 255 kí tự. hãy lập trình
tạo tệp LINE.DAT chứa các xâu ở tệp LINE.TXT, nhưng mỗi xâu đã được chuẩn hóa
theo các quy tắc sau:
 Xóa tất cả các dấu cách đầu và cuối xâu.
 Nhiều dấu cách lien tiếp (nếu có) được thay bằng dấu cách duy nhất.
1. Tìm hiểu đề bài:
 Input: Tệp LINE.TXT
 Output: Tệp LINE.DAT
2. Ý tưởng giải thuật:

- Trang 6 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
3. Trình bày lời giải:

4. Mở rộng bài toán:


Cho tệp LINE.TXT, mỗi dòng không chứa một xâu không quá 255 kí tự. hãy lập
trình tạo tệp LINE.DAT chứa các xâu ở tệp LINE.TXT, lưu các thông tin sau:
 Đếm các số các số nguyên có trong xâu.
 Tìm các số nguyên là số chẵn có trong xâu.

- Trang 7 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Sinh viên: Nguyễn Thị Thanh Minh
Lớp: Tin 4B

 Bài tập 3.41 trang 26 sách Bài tập tin học 11.
 Bài tập 5.14 trang 57 sách Bài tập tin học 11.

I. Bài 3.41:
1. Tìm hiểu bài toán:
- Input: Nhập thời gian: h giờ m phút s giây.
- Output: Trạng thái hiện tại là ngọn đèn hải đăng đang sáng hay tắt.
2. Ý tưởng giải thuật:
- Bước 1: Nhập thời gian h giờ m phút s giây.
- Bước 2: Nếu hoặc hoặc thì quay lại bước 1.
- Bước 3: Nếu và thông báo đèn ở trạng thái tắt. Đến bước 5.
- Bước 4: Nếu thông báo đèn ở trạng
thái tắt. Ngược lại thông báo đang sáng
- Bước 5: Kết thúc.
3. Trình bày lời giải

4. Nghiên cứu lời giải và mở rộng bài toán:


4.1. Xây dựng bộ test: Thời gian
Trạng thái
Giờ Phút Giây
19 30 15 Sáng
2 17 34 Tắt

4.2. Bài toán này còn có thể dùng để kiểm tra trạng thái của đèn với giá trị t1,
t2 khác khi đó ta chia hiệu thời gian đó cho t1+t2

- Trang 8 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
II. Bài 5.41:
1. Tìm hiểu đề bài:
- Input: Tệp văn bản DUONGI.TXT.
- Output: Khoảng cách của nhóm so với trại.
2. Ý tưởng giải thuật:
- Do chỉ cần biết được khoảng cách của nhóm so với trại nên ta gắn vào hướng đi
của nhóm theo một hệ trục toạ độ: Gốc là trại, chiều dương trục Ox là hướng
Đông, chiều dương trục Oy là hướng Bắc.
- Dùng biến tạm h để tính toạ độ của nhóm với quy ước rẽ trái h giảm đi 1, rẽ phải
h tăng lên 1.

3. Trình bày lời giải:

- Trang 9 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Sinh viên: Phan Thi Hoa
Lớp: Tin 4B
 Bài tập 3.29 trang 23 sách Bài tập tin học 11.
 Bài tập 7.37 trang 74 sách Bài tập tin học 11.

I. Bài 3.29:
Lập trình giải bài toán sau: Nhập 2 số nguyên a và b từ bàn phím( a<b). Xác định các số
nguyên lẻ i thõa điều kiện a<i<b. Đưa ra màn hình số lượng tính được và bản thân các số
lẻ này theo thứ tự tăng dần (mỗi số trên một dòng).
1. Tìm hiểu đề bài:
- Input: Hai số a và b (a<b).
- Output: Số lượng các số nguyên lẻ i (a<i<b) và các số lẻ này được sắp xếp theo
thứ tự tăng dần.
2. Ý tưởng giải thuật:
- Bước 1: Nhập a, b (a<b)
- Bước 2: i:=a; d=0;
- Bước 3: Nếu i>b thi qua 5
- Bước 4: Nếu i mod 2 =0 thi d=d+1 và in i tiếp tục tăng i =i +1;
- Bước 5: In d và kết thúc
3. Trình bày lời giải:

- Trang 10 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
4. Xây dựng bộ test:
Số a Số b Kết quả
5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41
5 41
19
15 17 19 21 23 25 27 29 31 33 35 37 39 41 43
15 43
15
7 9 11 13 15 17 19 21 23 25 27 29
7 30
12
II. Bài 7.37:
Lập trình nhập số nguyên n (1<n<=100) và dãy số . Sử dụng thủ
tục:
Procedure hoan_doi(var x, y: integer);
Var tg: integer;
Begin
Tg:=x;
X:=y;
Y:=tg;
End;
Sắp xếp lại các phần tử của p theo thứ tự không giảm. Đưa kết quả đã sắp xếp ra màn
hình.
1. Tìm hiểu đề bài:
- Input: Số n, dãy p.
- Output : Dãy p theo thứ tự tăng dần.
2. Ý tưởng giải thuật:
- Bước 1: Nhập n và dãy p
- Bước 2: i:=0;
- Bước 3: Nếu i> n-1 thì chuyển qua 5 còn không thì j:=i+1
- Bước 4: Nếu j<=n thì
 Nếu a[i]> a[j] thi gọi thủ tục hoan_doi(a[i], a[j])
 j:=j+1
 Quay lại bước 4
- Bước 5: Ngược lại
 i:=i+1
 Quay lại bước 3
- Bước 6: In dãy sắp xếp p và kết thúc.

- Trang 11 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
3. Trình bày lời giải:

4. Nghiên cứu lời giải và mở rộng bài toán:


4.1. Xây dựng bộ test:
Dữ liệu vào
Kết quả
n Dãy p
7 7816495 1456789
10 9 15 3 4 6 7 9 2 1 8 1 2 3 4 6 7 8 9 9 15

4.2. Mở rộng bài toán: Bổ sung một số vào dãy p mà vẫn giữ được trật tự sắp xếp…

- Trang 12 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Sinh viên: Lê Thị Mai
Lớp: Tin 4B
 Bài tập 3.39 trang 23 sách Bài tập tin học 11.
 Bài tập 5.12 trang 74 sách Bài tập tin học 11.

I. Bài 3.39:
Cho hai hinh chữ nhật có các cạnh song song với trục toạ độ và có toạ độ đỉnh là số
nguyên. Mỗi hình chữ nhật được xác định bởi toạ độ đỉnh trên trái và toạ độ đỉnh dưới
phải. Hãy viết chương trình xác định hai hình chữ nhật này có điểm chung hay không?
1. Tìm hiểu đề bài:
- Input: Nhập các đỉnh của 2 hình chữ nhật
 Hình chữ nhật thứ nhất có đỉnh là: A(x, y), B(x, y);
 Hình chữ nhật thứ hai có đỉnh là: C(x, y), D(x, y);
- Output: Hai hình chữ nhật này có điểm chung hay không?
2. Ý tưởng thuật toán:
2.1. Ý tưởng:
- Hai hình chữ nhật có điểm chung thì có 4
trường hợp xảy ra:
 ((Ax<=Cx) and (Cx<=Bx)) and
((By<=Cy) and (Cy<=Ay))
 ((Ax<=Dx) and (Dx<=Bx)) and
((By<=Cy) and (Cy<=Ay))
 ((Ax<=Cx) and (Cx<=Bx)) and ((By<=Dy) and (Dy<=Ay))
 ((Ax<=Dx) and (Dx<=Bx)) and ((By<=Dy) and (Dy<=Ay))
- Nếu một trong 4 trường hợp đúng thì hai hình chữ nhật đó sẽ cắt nhau.
2.2. Các bước thực hiện:
- Bước 1: Nhập các đỉnh của 2 hcn: A, B, C, D
- Bước 2: Kiểm tra điều kiện
 Nếu (( (Ax<=Cx) and (Cx<=Bx)) and ( (By<=Cy) and (Cy<=Ay))) or
(( (Ax<=Dx) and (Dx<=Bx)) and ((By<=Cy) and (Cy<=Ay)))or (((Ax<=Cx)
and (Cx<=Bx)) and ((By<=Dy) and (Dy<=Ay))) or (((Ax<=Dx) and
(Dx<=Bx) ) and ((By<=Dy) and (Dy<=Ay)))
thì In thông báo “Hai hcn đó cắt nhau”
 Ngược lại thì in thông báo “Hai hcn không cắt nhau”
- Bước 3: Kết thúc thuật toán.

- Trang 13 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
3. Trình bày lời giải:

4. Mở rộng bài toán: Xác định tâm và bán của hình tròn nhỏ nhất chứa 2 hình chữ nhật
trên.
II. Bài 5.12:
Thông tin về tình hình xuất khẩu gạo cả năm của công ty A được ghi trong tệp văn bản
RICE.DAT, Mỗi loại gạo xuất khẩu ứng với một dòng 3 gía trị: Số lượng xuất, đơn giá
và loại gạo, mỗi loại gạo có một tên riêng. Các gía trị được ghi cách nhau một dấu cách.
Tệp chứa không qua một trăm dòng thông tin.
Số lượng xuất ( Tấn ) Đơn giá (USD/Tấn) Loại gạo

Nguyên
Số thực Xâu
dương không
không quá
quá 2*109
30 kí tự

Hãy lập trình đọc tệp RICE.DAT, tính và Đưa ra màn hình các thông tin sau:
- Tổng số tiền thu được từ xuất khẩu gạo
- Tên các loại gạo thu nhập cao nhất.
1. Tìm hiểu đề bài:
- Input: Cho tệp RICE.DAT có Số lượng xuất, đơn giá, loại gạo. Tệp chứa
không quá 100 dòng thông tin
- Output: Tổng số tiền thu được và tên các loại gạo thu nhập cao nhất.
2. Ý tưởng thuật toán:
2.1. Ý tưởng:
- Đọc tệp RICE.DAT

- Trang 14 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
- Khi chưa phải cuối tệp thì tổng:= tổng + sl*dg
- So sánh sl*dg của các loại gạo và đưa ra kết quả.
2.2. Các bước thực hiện:
- Bước 1: Gán tên tệp : assign(f, ’RICE.DAT’); Mở tệp : reset (f);
- Bước 2: Khởi gán n:=0
Nếu không phải cuối tệp thì
 Tăng biến n:=n+1;
 Đọc tệp: readln( f, a[n].sl, a[n].dg, a[n].lg);
- Bước 3: Tổng:=0; i:=0;
 Nếu i<=n thì
 Tổng:=Tổng + a[i].sl*a[i].dg;
 Tăng biến i:=i+1;
 Ngược lại thì Qua B5
- Bước 4: Gán max:=a[1].sl*a[1].dg;
 Nếu i<=n thì
 Tăng i:=i+1
 So sánh a[i].sl*a[i].dg > max thì hoán đổi
 Ngược lại Qua B5;
- Bước 5:
 In thông báo “tổng số tiền thu được”;
 So sánh nếu max = a[i].sl*a[i].dg thì in thông báo “Các loại gạo có thu nhập
cao nhất”;
- Bước 6: Kết thúc thuật toán.
3. Trình bày lời giải:

- Trang 15 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
4. Mở rộng bài toán:Hãy đưa ra tên các loại gạo cho thu nhập thấp nhất (Đơn giá*số
lượng xuất là thấp nhất). Viết chương trình nhập thêm dữ liệu (Số lượng, đơn giá, loại
gạo) vào trong tập tin “RICE.DAT”

- Trang 16 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Họ và tên: Trương Thị Khánh Hà
Lớp: Tin 4B

I. Bài 3.27:
1. Tìm hiểu đề bài:
- Input: Nhập m, n, k
- Output: Kiểm tra p là số có hơn 2 số có nghĩa và số hàng đơn vị bằng 0 không?
2. Xây dựng ý tưởng giải thuật
- Tính tích p = m*n*k
- Kiểm tra các điều kiện:
 p > 99
 p mod 10 = 0
- Từ đó đưa ra kết luận p có phải là số có hơn hai chữ số có nghĩa và số hàng đơn
vị bằng 0?
- Sơ đồ khối

- Trang 17 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
3. Trình bày lời giải
Var m, n, k: interger;
p: interger;
Begin
Repeat
Write(‘ Nhập m, n, k:’);
Readln( m, n, k);
Until((m > 0) and(n > 0) and(k > 0));
p:=m*n*k;
If p>99 then
If p mod 10 = 0 then
Writeln(p, ’là số có hơn 2 chữ số có nghĩa và số hàng đơn vị bằng 0’)
Else
Writeln(p, ’là số có hơn 2 chữ số có nghĩa và số hàng đơn vị khác 0’);
Else
Writeln(p, ’ là số không có hơn hai chữ số có nghĩa’);
Readln;
End.

4. Nghiên cứu về lời giải

m n k p=m*n*k Kết luận


4 5 6 120 p là số có hơn hai chữ số có nghĩa và hàng đơn vị bằng 0
2 3 1 6 p là số không có hơn hai chữ số có nghĩa
4 3 2 24 p là số không có hơn hai chữ số có nghĩa
4 7 4 112 p là số có hơn hai chữ số có nghĩa và hàng đơn vị khác 0

II. Bài 4.47:


Mảng các bản ghi luôn có thể thay thế bằng 1 số mảng có kiểu phần tử chuẩn khác bản ghi.
Với bảng Lop : array[ 1.. 60] of Hocsinh;
Ta có thể thay thế như sau:
- Điểm số thay thế bằng 7 mảng 1 chiều
Var Điểm: array [0..10]of Real;
Tin, toan, li, hoa, van, su, đia: Real;
- Các trường khác mỗi trường ứng với 1 mảng
Var Hoten: array[1..30] of String;
Var Ngaysinh: aray[1..10] of String;
Var Gioitinh: array[1..2] of Boolean;

- Trang 18 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Sinh viên Lê Đức Chinh
Lớp tin 4 B
Bài tập Môn :PP GIẢI BÀI TẬP TRUNG HỌC PHỔ THÔNG.
Bài 319(sbt trang 21):
Cho ba số nguyên p, q, r(#0) .Kiểm tra ba số này, theo thứ tự nhập vào có tạo thành một cấp
số nhân hay không. Viết chương trình thực hiện yêu cầu trên.
Bước 1:
Input: bộ ba số p, q, r
Output: kiểm tra xem day p, q, r có là cấp số nhân không.
Bước 2:
Sơđồ khối: Begin

Nhập p, q, r

q/
p=r/q

Thông báo phải Thông báo không phải

End.

Bước 3:viết chương trình


program bai319_bt11;
var p, q, r:integer;
Begin
repeat
writeln('nhap ba so nguyen p, q, r de kiem tra');
readln(p, q, r);
until( q<>0) and( p<>0)and (r<>0);

if q/p=r/q then writeln(p, ' ', q, ' ', r, ': la cap so nhan')
else writeln(p, ' ', q, ' ', r, ': khong phai cap so nhan');
readln;
end.
Bước 4
Mở rộng cho hs giải các bài toán tương tự như kiểm tra cấp số cộng không, trong trường hợp
lớn hơn 3 số làm thế nào? Xác định số hạng tiếp theo nếu đây là cấp số nhân (số cộng).
Bài 440(sbt trang 45):Hãy lập trình
-Nhập một xâu bất kì từ bàn phím.
-Chuẩn hóa xâu theo quy tắc sau:
+xóa các dấu cách ở đầu xâu nếu có;

- Trang 19 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
+xóa các dấu cách ở cuối xâu nếu có;
+thay dãy nhiêu dấu cách liên tiếp bằng một dấu cách.
-đưa kết quả đã chuẩn hóa ra màn hình.
Bước 1:
Input: nhập một xâu s
Output:Đưa ra xâu s chuẩn ..
Bước 2:
B1.nhập xâu s;
B2 .xóa trong xâu s đi 1 kí tự nếu có hai kí tự trắng liền nhau.
B3 kiểm tra kí tự đầu và cuối nếu chúng là kí tự trắng thì xóa.
B4.đưa lần lươt s[i] ra màn hình đến hết.
B5. kết thúc
Bước 3:viết chương trình
program chuanhoaxau;
var s:string;
i:integer;
Begin
writeln('nhap vao mot xau ');
readln(s);
for i:=1 to length(s) do
write(s[i]);
while pos(' ', s)<>0 do
delete(s, pos(' ', s), 1);
if s[1]=' 'then delete(s, 1, 1);
if s[length(s)]=' ' then delete(s, length(s), 1);
writeln('xau sau khi duoc chuan hoa la ');
for i:=1 to length(s) do
write(s[i]);
readln;
end.
Bước 4
Mở rộng cho hs giải các bài toán tương tự như kiểm tra có một từ cần tìm , bổ xung từ vào
xâu, xóa một từ trong xâu. Đảo xâu.....

- Trang 20 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
HỌ VÀ TÊN : NGUYỄN VĂN TRUNG
LỚP : TIN 4B

BÀI TẬP MÔN : PHƯƠNG PHÁP GIẢI BÀI TẬP TIN HỌC PHỔ THÔNG TRUNG
HỌC

Bài 4.30
Bước 1 Xác định bài toán:
- Input : Nhập các tọa độ của các đỉnh của các ô cửa số hiện trên màn hình của
máy tính: A(X1, Y1), B(X2, Y2), C(X3, Y3), D(X4, Y4);
- Output : Xác định số lượng K điểm ảnh bị che trên cửa sổ.
Bước 2 Xây dựng ý tưởng giải thuật:
- Xây dựng mảng để lưu các điểm ảnh được xác định tọa độ cột x và tọa độ hàng y.
- Xây dựng các câu lệnh For –Do để đánh dấu các giao điểm của các cửa sổ.
Bước 3 Giải thuật của bài toán:
Program Xác_Định_Số_Giao_Điểm;
Var x1, y1, x2, y2, x3, y3, x4, y4: Integer;
S, I, j: integer;
M: array[0..739, 0..1023] of byte;
Begin
Writeln(‘Nhập tọa độ các đỉnh:’);
Write(‘x1’); Readln(x1);
Write(‘y1’); Readln(y1);
Write(‘x2’); Readln(x2);
Write(‘y2’); Readln(y2);
Write(‘x3’); Readln(x3);
Write(‘y3’); Readln(y3);
Write(‘x4’); Readln(x4);
Write(‘y4’); Readln(y4);
S:=0;
For i:=0 to 739 Do
For j:= 1 to 1023 Do
M[i, j]:=0;
For i:= x1 to x2 do
For j:= y1 to y2 Do
M[I, j]:=1;
For i:= x3 to x4 Do
For j:=y3 to y4 Do
If M[I, j]=1 then inc(s);
Writeln(‘Số điểm bị che là:’, s);
End.

Bài 7.17
Bước 1 Xác định bài toán:

- Trang 21 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
- Input: Nhập vào tọa độ các đỉnh của hình chữ nhật:A(xa, ya), C(xc, yc), E(Xe,
Ye), G(Xg, Yg).
- Intput: Xác định tọa độ tâm 0(X0, Y0) và tâm của hình tròn chứa hai hình chữ
nhật trên.
Bước 2 Xây dựng ý tưởng giải thuật:
- Xây dựng hàm tính khoảng cách giữa hai điểm bất kỳ nào đó.
- Lấy tọa độ trung điểm của hai điểm A(Xa, Ya) và G(Xg, Yg) và tọa độ này cũng
chính là tọa độ tâm của hình tròn nhỏ nhất chứa hai hình chữ nhật trên.
- Kiểu dữ liệu cần xây dựng là kiểu: Real;
Bước 3 Giải thuật của bài toán:
Program Hinh_tron.
Var Xa, Xe, Ya, Ye, Xg, Yg, X0, Y0, X1, Y1, X2, Y2, Xc, Yc: Real;
Function Khoang_cach(X1, X2, Y1, Y2:Real); Real;
Begin
Khoang_cach:=sqrt(sqr(X1-X2)+sqr(Y1-Y2));
End;
Begin
Writeln(‘Nhập tọa độ:’);
Write(‘Xa’); Readln(Xa);
Write(‘Ya’); Readln(Ya);
Write(‘Xc’); Readln(Xc);
Write(‘Yc’); Readln(Yc);
Write(‘Xe’); Readln(Xe);
Write(‘Ye’); Readln(Ye);
Write(‘Xg’); Readln(Xg);
Write(‘Yg’); Readln(Yg);
X1:=Xa; Y1:=Ya;
X2:=Xg; Y2:=Yg;
X0:=(X1+X2)/2; Y0:=(Y1+Y2)/2;
Writeln(‘Đường tròn tâm’, X0, Y0);
Writeln(‘Bán kính’, Khoang_cach(X1, Y1, X2, Y2);’
Readln;
End.

- Trang 22 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
PHƯƠNG PHÁP GIẢI BÀI TẬP

Người soạn: Nguyễn Kính Doanh


Lớp: Tin4B

I.Đề bài: (Bài 3.23/Trang 22(SBTTH11))


Cho cấp số cộng a0, a1, a2, ……, ak, …. Trong đó ak=ak-1+d, k=1, 2…. Hãy viết chương
trình :
 Nhập ba số nguyên a0, d, và b;
 Tìm và đưa ra màn hình số n nguyên không âm nhỏ nhất thoả mãn điều kiện
an≥b.
II.Phương pháp giải bài tập:
Bước 1: + Input: a0, d, b
a0, a1, a2, ……, ak, ….( ak=ak-1+d, k=1, 2….)
+ Output: giá trị n (n≥0 và an≥b)
Bước 2: - Ý tưởng giải thuật:
 Kiểm tra giá trị b≤a[0] thì in ra màn hình giá trị n là 0
 Kiểm tra nếu d≤0 và b>a[0] thì in ra màn hình không có giá trị của n.
 Sử dụng vòng lặp WHILE-DO để tìm phần tử a[i] có giá trị lớn hơn hoặc
bằng b với a[i]=a[i-1]+d..
 Kết thúc vòng lặp khi nào có giá trị a[i] ≥b và in ra màn hình giá trị n là
giá trị của i.
Sơ đồ khối:

Bước 3: Trình bày lời giải


Program bt;
Type mang=array[0..100] of integer;
var a:mang;
i:integer;

- Trang 23 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
d, b:integer;
Begin
write('nhap a0 : ');readln(a[0]);
write('nhap d, b: ');readln(d, b);
if b<=a[0] then
write('gia tri n la:0')
else
if (d<=0) then
write(‘khong co gia tri n’);
else
begin
i:=0;
while (a[i]<b) do
begin
i:=i+1;
a[i]:=a[i-1]+d;
end;
write('gia tri n la:', i);
end;
readln;
end.
Bước 4: + Xây dựng bộ TEST
Bảng TEST:

a[0] d b b<a[0] i a[i] a[i]<b


12 2 20 S 0 12 Đ
1 14 Đ
2 16 Đ
3 18 Đ
4=n 20 S

*Giá trị n là : 4
+ Xây dựng bài toán tương tự
Bài toán:
Cho cấp số cộng a0, a1, a2, ……, ak, …. Trong đó ak=ak-1+d, k=1, 2…. Hãy
viết chương trình:
 Nhập vào a0, d.
 Tìm và đưa ra màn hình giá trị a k sao cho ak là số nguyên không âm
lẻ đầu tiên của cấp số cộng .

- Trang 24 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
I.Đề bài: (Bài tập 4.43/trang 46(SBTTH11))
Hãy lập trình :
 Nhập từ bàn phím số nguyên dương N (1≤N≤20) và N số nguyên A1, A2, ......., AN.
 Đưa ra màn hình số lượng số A i lẻ và bản thân các số A i lẻ theo trình tự xuất hiện
của chúng trong dãy đã nhập. Nếu trong dãy đã nhập không có số lẻ nào thì đưa ra
màn hình kết quả là một số 0.
II.Phương pháp giải bài tập:
Bước 1: + Input: N(1≤N≤20)
A1, A2, ….., AN.
+ Output: -Số lượng Ai lẻ.
-Bản thân Ai.
Bước 2: Ý tưởng giải thuật:
- Gán d:=0 (d:đếm số lượng Ai lẻ);
- Sử dụng vòng lặp FOR để duyệt từ A1 đến AN
- Kiểm tra điều kiện A i : + Nếu Ai chia 2 dư 1 thì in ra màn hình A i và tăng
biến đếm d lên 1.
+ Nếu không thì tăng i lên 1.
- Sơ đồ khối :

Bước 3: Trình bày


lời giải:
program bt43;
type mang=array[1..50] of integer;
var A:mang;
N, i, d, j:integer;
begin
Repeat
write('nhap N:');readln(N);
Until ((N>=1) and (N<=20));
for i:=1 to N do

- Trang 25 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
begin
write('A[', i, '] :');readln(A[i]);
end;
d:=0;
for j:=1 to N do
begin
if A[j] mod 2 =1 then
begin
d:=d+1;
write('so le thu ', d, 'la:', A[j]);
readln;
end;
end;
write('so luong so le la:', d);
readln;
end.
Bước 4:
- Xây dựng bộ TEST:
+ Mảng A gồm N=10 phần tử.

A1 A2 A3 A4 A5 A6 A7 A8 A9 A10
0 7 2 8 4 1 11 6 8 10

+ Bảng Test.

N i i>N A[i] A[i] mod 2 =1 d


25
10 1 S 0 S 0
2 S 7 Đ 1
3 S 2 S 1

- Trang 26 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

Hoàng Thị Cẩm Tú


Lớp: Tin 4b

PHƯƠNG PHÁP GIẢI BÀI TẬP TIN HỌC

Bài 4.31/42 ( sách bài tập tin học 11)


Cho dãy số nguyên N (1<N<=50) và N số nguyên A1, A2, …A , trong đó có ít nhất 2 số 0.
Hãy lập trình:
• Nhập từ bàn phím số nguyên N và dãy A1, A2, …, A
• Tính tổng các số Ai nằm giữa số 0 đầu tiên và số 0 cuối cùng và đưa kết quả ra màn hình.
Nếu 2 số 0 này nằm cạnh nhau thì kết quả đưa ra sẽ là 0.
Bước1: Tim hiểu đề bài
Input: Nhập số nguyên N và dãy A1, A2, …, A (có ít nhất 2 số 0)
Output: Tính tổng các số nằm giữa số 0 đầu tiên và số 0 cuối cùng
Bước 2: Xây dựng ý tưởng giải thuật
Tìm số 0 đầu tiên từ trái sang phải, số 0 thứ 2 từ phải sang trái, sau đó tính tổng.

- Trang 27 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

Bước 3: Trình bày lời giải


Program tinhtong:
Uses crt;
Var s, i, j, k, n: integer;
A: array[0..100] of integer;
Begin
Clrscr;
Write(‘nhap so nguyen n’);
Readln(n);
for i:=1 to n do
begin
write(‘nhap mang A[‘, i, ’]=’);
readln(A[i]);

- Trang 28 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
end;
i:= 1;
j:= n;
while A[i]<> 0 do i:= i+ 1;
while A[j]<> 0 do j:= j- 1;
S:= 0;
for k:= i to j do
begin
S:= S+ A[k];
k:= k+ 1;
end;
writeln(‘tong la:’, s);
readln;
End.
Bước 4: Nghiên cứu về lời giải
Xây dựng bộ test
Cho dãy: 1 0 2 3 0 4
i:= 1
j:= 6
A[1] <>0 ; i:= 2
A[2] = 0
A[6]<>0; j:= 5
S:= 0; k:=2
S:= S + 0 = 0; k:=3<5
S:= S + 2 = 2; k:= 4<5
S:= S + 3= 5; k:= 5
S:= S + 0= 5: k: =6 sai
Dừng
Bài 7.18/69 (sách bài tập tin học 11)
Xét một ngôn ngữ có phân biệt chữ hoa và chữ thường (ví dụ như C++)

- Trang 29 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
a) Chỉ dùng các chữ cái La tinh, có thể đặt bao nhiêu tên khác nhau độ dài bằng 1?
b) Chỉ dùng các chữ cái La tinh, có thể đặt bao nhiêu tên khác nhau độ dài bằng 2?
Đáp án: bảng chữ cái La tinh có 26 chữ cái hoa (A…Z), 26 chữ cái thường (a…z)
a) 52
b) 52 × 52= 2704

- Trang 30 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Sinh viên: Đặng Thị Hà Thanh
Lớp : Tin 4B
Bài Tập Môn Phương Pháp Giải Bài Tập Tin Học Phổ Thông.

+ 4.17.
Bước 1. Input:
Output: p1, p4000
Bước 2.
B1. p[1]:= random(6);
i:= 2;
B2. Nếu i<= 4000 thì thực hiện:
p[i]:= p[i-1]+random(6)+1;
Quay lại B2.
B3. In kết quả, kết thúc giải thuật.
Bước 3. Chương trình
Var p: array[1..4000] of integer;
i : integer;
Begin
p[1]:= random(6);
For i:=2 to 4000 do
p[i]:=p[i-1]+random(6)+1;
Writeln('p[1]=', p[1]);
Writeln('p[4000]=', p[4000]);
Readln;
End.
Bước 4.
p[1]= 2
i=2 p[2]= p[1]+random(6)+1
= 2+3+1
= 6
i=3 p[3]= p[2]+random(6)+1
= 6+2+1
= 9
....

+ 6.19.
Bước 1. Input: tọa độ Đề các(x, y)
Output: tọa độ cực (r, )
Bước 2.
B1. Tính
+ r := sqrt(x2+y2);
+ Nếu x>0 thì = arctan(y/x) ;
+ Nếu ( x=0) và (y>0) thì = /2 ;
+ Nếu (x=0) và (y=0) thì = 0;

- Trang 31 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
B2. Kết thúc giải thuật.
Bước 3. Chương trình:
Procedure POLAR(x, y:real; var r, :real);
Begin
r:= sqrt(x*x+y*y);
if x>0 then := arctan(y/x);
if x=0 and y>0 then := /2;
if x=0 and y=0 then := 0;
end;
Bước 4.
Gọi thủ tục POLAR(3, 4, r, )
r= sqrt(3*3+4*4)= 5
x=3>0 = arctan(4/3)=9, 2729

- Trang 32 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Bài tập môn: PP giải bài tập tin học
Sinh viên : Hồ Đức Thuận
Lớp : Tin 4B
Bài 3.25
1. Xác định bài toán
Input: xâu s
Output: thông báo xâu hợp lệ hay không.
2 Ý tưởng thuật toán.
-Kiểm tra xem trong xâu có ký tự đóng “)” nào nằm trước kí tự mở “(“ không. Nếu có thì
thông báo là xâu không hợp lệ. Còn nếu không thì kiểm tra tiếp xem số lượng kí tự đóng có
bằng số lượng kí tự mở không.
- Thuật toán
Bc1: Nhập xâu s, i:=1, m:=0, d:=0.
Bc2: Nếu i<=length(s) và m>=d thi
-Kiểm tra nếu s[i]= “(“ đúng inc(m);
+Ngược lại inc(d);
+ inc(i);
- quay lại bc2.
Bc3: Nếu i<= length(s) thì thông báo s không hợp lệ, kết thúc thuật toán
Nếu i>length(s) thì kiểm tra:
- Nếu m=d thì thông báo xâu hợp lệ
ngược lại là xâu không hợp lệ.
Kết thúc thuật toán
3. Cài đặt
Program xau;
var s:string;
i, m, d:integer;
Begin
write('Nhap xau s= '); readln(s);
i:=1; m:=0; d:=0;
While (i<=length(s)) and (m>=d) do
begin
if s[i]='(' then inc(m)
else inc(d);
inc(i);
end;
if i<=length(s) then writeln(' Xau khong hop le')
else if m=d then write(' Xau hop le')
else write('Xau khong hop le');
Readln;
End.
Bài 6.23: Mô tả hàm posk(x, y, k) trả về giái trị nguyên j là vị trí xuất hiện lần thứ k của
xâu x trong xâu i, j=0 nếu số lần xuất hiện xâu x trong xâu y ít hơn k lần.
Bài giải

- Trang 33 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
1. Phân tích bài toán:
- Input : Xâu X, xâu Y, k.
- Output: Vị trí xuất hiện lần thứ k của xâu x trong trong y.
2.Ý tưởng giải thuật :

Begin

i:=1; j:=1; ok:=true; d:=0; vt:=0;


m:=length(x); n:=length(y);

ok In vt End

i<m and i<m Inc(d)


j<n
i:=i+1; j:=1

Ok:=false d= J:=1
y[i]=x[j] k

Vt:=i-m
ok:=false
I:=i+1 j:=j+1

3. Chương trình
Var s1, s2:string;
k:integer;
Function posk(x, y:string; k:integer):integer;
Var d, i, j, vt, m, n :integer;
ok:boolean;

- Trang 34 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Begin
d:=0;
i:=1; j:=1; ok:=true; vt:=0; m:=length(x); n:=length(y);
while ok do
Begin
repeat
If y[i]=x[j] then
Begin
inc(i); inc(j);
End
else
Begin
inc(i);
j:=1;
End;
until (j>m) or (i>n);
If j>m then inc(d)
else ok:=false;
If d=k then
begin
vt:=i-m(x);
ok:=false;
end
Else j:=1;
End;
posk:=vt;
End;
BEGIN
write(' Nhap xau s1 : '); readln(s1);
write(' Nhap xau s2 : '); readln(s2);
write(' Nhap so k : '); readln(k);
write(' Chi so xuat hien lan thu k cua xau s2 trong s1 la ', posk(s2, s1, k));
readln
END.

- Trang 35 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Nguyễn Thị Lan Hương

Bài 3.34:Tuổi cha hiện nay là B và tuổi con là C (0<C<B, B, C là số nguyên và theo luật hôn nhân
và gia đình B-C>=19). Viết chương trình kiểm tra xem tuổi cha có gấp đôi tuổi con hay không, nếu
đúng thì đưa ra màn hình câu thông báo ‘HIEN NAY TUOI CHA GAP ĐOI TUOI CON’, trong
trường hợp ngược lại, hãy tính số năm N mà trước đó hoặc sau đó tuổi cha gấp đôi tuổi con và đưa
câu thông báo dạng ‘N NĂM TRƯỚC ĐÂY TUỔI CHA GẤP ĐÔI TUỔI CON’ hoặc ‘SAU N
NĂM TUỔI CHA SẼ GẤP ĐÔI TUỔI CON’
VÍ DU, với B=59, C=29 thì in ra câu thông báo sẻ là:
SAU 1 NĂM NỮA TUÔI CHA SE GẤP ĐÔI TUỔI CON
B1:input:nhập B, C;
Output: đưa ra màn hình câu thông báo tuổi cha gấp đôi tuổi con, sau N năm tuổi cha gáp đôi tuổi
con hoặc trước đó N năm tuổi cha gấp đôi tuổi con
var b, c, n, k:integer;
B2: Ý tưởng:sử dụng câu lệnh if , nếu b=2*c thì thông báo ra màn hình HIỆN NAY TUỎI CHA
GẤP ĐÔI TUỔI CON, còn nếu b-2*c>0 thì thông báo “SAU N=b-2*c TUỔI CHA SẺ GẤP ĐÔI
TUỔI CON’, còn nếu b-2*c<0 thì thông báo ‘N NĂM TRƯỚC ĐÓ TUỔI CHA GẤP ĐÔI TUỔI
CON
B3:SƠ ĐỒ KHỐI:

Begin

Sau N năm t ổi cha


s ẻ g ấp đ ôi tuôi
NHAP B, C con

B>C>0 N:=B-2*C
B-
C>19

B:=2* B>2*C
C

N=2*C-B

Tr ư ớc đ ó N N ĂM TU ỔI
CHA G ẤP ĐÔI TU ỔI CON

END

B4:CHƯƠNG TRÌNH

- Trang 36 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

begin
repeat
writeln('nhap tuoi cha');readln(b);
writeln('nhap tuoi con');readln(c);
if(b-c<19) or(c<0) or (b<c) then
writeln('ban phai nhap lai');
until(c>0) and (c<b) and (b-c>=19);
if b=2*c then writeln('hien tuoi cha gap doi tuoi con')
else
if b>2*c then
writeln('sau', b-2*c, 'nam tuoi cha se gap doi tuoi')
else
k:=2*c-b;
write(2*c-b, 'nam truoc day tuoi cha gap doi tuoi con');
readln;
end.

BAI 4.53:
Kết qủa kiểm tra sức khoẻ học sinh được ghi tren phiếu co dạng :
Phiếu kiểm tra sức khoẻ
l ớp:……………
Họ va ten:……………………………
Nam/nữ:…………………………………
Chiều cao:………………………….cm
Can nặng :……………………………kg

Lập từ ban phím ten lớp va số nguyen N- số hoc sinh trong lơp , sau đó nhập N phiếu kiểm
tra học sinh của lớp , với mỗi phiếu , chỉ cần nhập bốn trường cuối .
hảy:
a)x ác định kiểu dử liệu về khai biến thích hợp
b)Viết đoạn ch ương trình tính và đưa ra màn hình các thông tin sau:
-chiều cao trung bình của tất cả học sinh, chiều cao trung bình của nam va chiều cao
trung bình của nữ
-C ân nặng trung bình trung bình của tất cả học sinh , cân nặng trung bình của nam, can
nặng trung bình của nữ;
-số học sinh cao hơn chiều cao trung bình của toan lớp, số học sinh nam cao hơn chi ều cao
trung bình của nam, số học sinh nữ cao hơn chiều cao trung bình cuả
nữ
-Số học sinh nhẹ hơn mức trung bình của lớp, số học sinh nam nhẹ hơn mức trung bình của
nam, số học sinh nữ nhẹ hơn mức trung bình của nữ

- Trang 37 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
B1:input :nhập vao ten lop , N, họ va ten , gioi tinh , chieu cao, can nặng
Output:cctb, cctbnam, cctbnu, , cntb, cntbnam, cntbnu, sohscaohoncctb,
sohscaohoncctbnam, sohscaohoncctbnu, sohsnhehontb, sohsnhehontbnam,
sohsnhehontbnu
B2: Ý tưởng: nhập từ bàn phím tên lớp và số hocsinh trong lớp , sau đó nhập các
Trường. Dùng bản ghi để lưu các đối tượng cùng các thuộc tính , sau đó dung vòng lặp for
duyệt tù đầu dảy đến cuối dảy để đưa ra các yêu cầu như bài đã cho

B3:Thuật toán :
uses crt;
type hocsinh=record
hovaten:string[30];
chieucao:real;
cannang:real;
lop:string[20];
gt, nam, nu:string[20];
end;
var hs:array[1..200]of hocsinh;
d1, d2, i, n:integer;
cntb, t, d, cctb, cctbnam, cctbnu, sohscao, cntbnam, cntbnu:real;
procedure nhap;
begin
writeln('nhap n');
readln(n);
for i:=1 to n do
begin
writeln('nhap lop');
readln(hs[i].lop);
writeln('nhaphovaten:');
readln(hs[i].hovaten);
writeln('nhap gioi tinh');
readln(hs[i].gt);
writeln('chieucao:') ;
readln(hs[i].chieucao);
writeln('cannang:');
readln(hs[i].cannang);

end;
end;
procedure xuat;
begin
writeln(' PHIEU KIEM TRA SUC KHOE');
writeln(' lop:', hs[i].lop) ;
writeln;

- Trang 38 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
for i:=1 to n do
begin
writeln(' hovaten:', hs[i].hovaten:0, '');
writeln(' nam/nu:', hs[i].gt:0);
writeln(' chieucao:', hs[i].chieucao:2:2, 'cm', '');
writeln(' cannang:', hs[i].cannang:0:0, 'kg', '') ;
writeln;
end;
writeln;
end;
procedure tinhcctb;
BEGIN
cctb:=0; cctbnam:=0;cctbnu:=0;d1:=0;d2:=0;
begin
for i:=1 to n do
cctb:=cctb+hs[i].chieucao;
cctb:=cctb/n;
writeln('CHIEUCAOTRUNGBINH:', cctb:2:2, 'cm');
end;

for i:=1 to n do
if (hs[i].gt='nam') then
BEGIN
cctbnam:=cctbnam+hs[i].chieucao;
d1:=d1+1;
END;
cctbnam:=cctbnam/d1;
writeln(' CHIEU CAO TB CUA NAM:', ' ', cctbnam:2:2, 'CM') for i:=1 to n do
if(hs[i].gt='nu') then
begin
cctbnu:=cctbnu+hs[i].chieucao;
d2:=d2+1;
end;
cctbnu:=cctbnu/d2;
writeln(' CHIEU CAO TB CUA NU', ' ', cctbnu:2:2);
end;
procedure tinhcntb;
begin
cntb:=0; cntbnam:=0;d1:=0;d2:=0;cntbnu:=0;
begin
for i:=1 to n do
cntb:=cntb+hs[i].cannang;
cntb:=cntb/n;
writeln(' CANNANGTRUNGBINH:' , cntb:2:1, 'kg');

- Trang 39 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
end;

begin
for i:=1 to n do
if(hs[i].gt='nu')then
begin
cntbnu:=cntbnu+hs[i].cannang;
d1:=d1+1;
end;
cntbnu:=cntbnu/d1;
writeln('CANNANGTRUNGBINH CUA NU:', cntbnu:2:1, 'kg');

end;

begin
for i:=1 to n do
if(hs[i].gt='nam') then
begin
cntbnam:=cntbnam+hs[i].cannang;
d2:=d2+1
end;
cntbnam:=cntbnam/d2;
writeln('CANNANGTRUNGBINH CUA NAM', ' ', cntbnam:2:1, 'kg');
end;

end;
procedure sohscaohoncctbcalop;
begin
begin
d:=0;t:=0;
for i:=1 to n do
if (hs[i].chieucao>cctb) then
d:=d+1
else
t:=t+1;
end;
writeln('SO HS CO CHIEU CAO CAO HON CHIEU CAO TB CA LOP' , ' ', d:0:0);
writeln('SO HS CO CHIEU CAO THAP HON CHIEU CAO TB CA LOP' , ' ', t:0:0);

d1:=0;d2:=0;
for i:=1 to n do
begin
if(hs[i].gt='nam')and(hs[i].chieucao>cctbnam) then
d1:=d1+1;

- Trang 40 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
end;
writeln(' SO HS NAM CAO HON CHIEU CAO TB NAM', ' ', d1);
for i:=1 to n do
begin
if (hs[i].gt='nu')and (hs[i].chieucao>cctbnu) then
d2:=d2+1;
end;
writeln(' SO HS NU CAO HON CHIEU CAO TB NU', ' ', d2);
END;
procedure sohsthaphoncctbcalop;
begin
d1:=0;d2:=0;
for i:=1 to n do
BEGIN
if(hs[i].gt='nam')and(hs[i].chieucao<cctbnam) then
d1:=d1+1;
END;
writeln(' SO HS NAM THAP HON CHIEU CAO TB NAM', ' ', d1);
for i:=1 to n do
BEGIN
if (hs[i].gt='nu')and (hs[i].chieucao<cctbnu) then
d2:=d2+2;
END;
writeln(' SO HS NU THAP HON CHIEU CAO TB NU', ' ', d2);
end;

begin
clrscr;
nhap;
xuat;
tinhcctb;
tinhcntb;
sohscaohoncctbcalop;
sohsthaphoncctbcalop;
readln;
end.

- Trang 41 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Sinh viên: Lê Ngọc Bảo
Lớp: Tin 4B
Bài tập: Phương pháp giải bài tập Tin Học

Bài 3.17(trang)
Bước 1:
-Input: Nhập vào 4 đỉnh có tọa độ A(x1, y1), B(x2, y2), C(x3, y3), D(x4, y4).
-Output: Tính và đưa ra độ dài hai đường chéo AC và BD
Bước 2: Ý tưởng giải thuật.
-Nhập vào theo theo tự 4 đỉnh A(x1, y1), B(x2, y2), C(x3, y3), D(x4, y4) sao cho 4 đỉnh đó
tạo thành 4 đỉnh của một tứ giác lồi ABCD
-Tính độ dài hai đường chéo theo công thức A(x, y), U(u, v)
d(AU)=sqrt(sqr(x-u) + sqr(y-v))
Sơ đồ khối:

Begin

NhậpA(x1, y1), B(x2, y),


C(x3, y3) D(x4, y4)

d1:= sqrt(sqr(x1-x3)+sqr(y1-y3))
d2:= sqrt(sqr(x2-x4)+sqr(y2-y4))

IN d1, d2

End

- Trang 42 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Bước 3: Chương trình
Var x1, x2, x3, x4, y1, y2, y3, y4: byte;
d1, d2: real;
Begin
Write(‘Nhap vao toa do dinh A’); readln(x1, y1);
Write(‘Nhap vao toa do dinh B’); readln(x2, y2);
Write(‘Nhap vao toa do dinh C’); readln(x3, y3);
Write(‘Nhap vao toa do dinh D’); readln(x4, y4);
d1:= sqrt(sqr(x1-x3)+sqr(y1-y3));
d1:= sqrt(sqr(x2-x4)+sqr(y2-y4));
writeln(‘Do dai duong cheo AC la :’, d1);
writeln(‘Do dai duong cheo BD la :’, d2);
readln;
End.
Bước 4: Test
A B C D AC BD
(-2;2) (2;4) (2;-3) (-2;-2) 6.4 7.21
(-5;2) (-4;5) (4;0) (-1;-3) 9.22 8.54
(-7;5) (-5;7) (2;6) -4;-2) 9.05 9.05
(-1;1) (2;3) (4;1) (2;-2) 5 5
 Mở rộng bài toán
Xây dựng giải thuật nhập vào tọa độ đỉnh của 2 vectơ sau đó tính độ dài của 2 vectơ đó

Bài 4.38(trang)
Bước 1:
- Input: Nhập vào tọa độ điểm m(x, y)
- Output: in ra đường đi từđiểm O(0, 0) đi đến điểm M dao cho đi đủ tất cả các hướng: S, N,
E, W
Bước 2: Ý tưởng giải thuật:
- Gán giá trj xâu S:=’’
- Duyệt theo hai giá trị x và y từ 1 đến y+1 và x+1
- Mỗi lần duyêt ta công vào xâu S một giá trị: S, W, E, N tương ứng theo các hướng
-
Bước 3: Chương trình

Var x, y, i:byte;
S:string;
Begin
Write(‘Nhap vao toa do cua diem M’); readln(x, y);
S:=’’;
If y>0 then
Begin
for i:=1 to y+1 do
S:=S+’N’;

- Trang 43 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
If x>0 then
for i:=1 to abs(x)+1 do
begin
S:=S+’E’;
End;
S:=S+’S’;
S:=S+’W’
else
for i:=1 to abs(x)+1 do
begin
S:=S+’W’;
End;
S:=S+’S’;
S:=S+’E’;
End
Else
Begin
for i:=1 to abs(y)+1 do
S:=S+’S’;
If x>0 then
for i:=1 to abs(x)+1 do
begin
S:=S+’E’;
End;
S:=S+’N’;
S:=S+’W’
else
for i:=1 to abs(x)+1 do
begin
S:=S+’W’;
end;
S:=S+’N’;
S:=S+’E’;
End

Writeln(‘duong di tu diem O den diem M la’, s);


end.
Bước 4: Test
Điểm M Đường đi
(4;5) NNNNNNEEEEESW
(-3;2) SSSWWWWNE
(-4;3) NNNNWWWWWSE
 Mở rộng bài toán:

- Trang 44 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Lê Thanh Phú – Tin 4B.
Bài 3.48:
Bước 1: Tìm hiểu đề bài.
Input : N ( 1< N ≤ 1000), a, b ( a<b), F(x)
Output : d của F(x)
Bước 2: Xây dựng giải thuật.
B1. Nhập N, a, b
B2. Tính
Max =0
Min =+∞
i = 0;
B3. Nếu i<N thì tính:
+ x = a + i*h;
+ F(x) = 5*x*x*x*x + 6*x*x*x – 4*x*x + 3*x -8
+ Nếu F(x)> Max thì gán Max : = f(x)
+ Nếu F(x) < Min thì gán Min : = F(x)
+ tăng i lên 1
+ Quay lại bước 3
B4. Tính d = Max – min
Thông báo kết quả.
Bước 3: Chương trình.
Program 3.48;
var Max, min, Fx, h: real;
i, a, b, n :integer;
Begin
write('Nhap a: '); readln(a);
write('Nhap b: '); readln(b);
write('Nhap N: '); readln(N);
h:=(b-a)/N;
i:=0; Max:=0; Min:=100000;
while i<=N do
begin
x:=a+i*h;
Fx:=6*sqr(x)*sqr(x) + 5*sqr(x)*x - 4*sqr(x) + 3*x -8;
if fx>max then max:=fx;
if fx<min then min:=fx;
i:=i+1;
end;
d:=max-min;
write(d:8:4);
readln;
end.
Bước4: xây dựng bộ test.
a=1, b=5, N=200 Kết quả:

- Trang 45 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Bước 1: Tìm hiểu đề bài
- Input : n
- Output: n!
Bước 2: Xây dựng giải thuật
B1: Nếu n = 0 thì
o Gán Tmp:=1;
o Sang bước 4.
B2: Gán i:=0; Tmp:=1;
B3: Khi i <= n thì làm:
- Tăng i lên 1.
- Gán Tmp := Tmp*i;
- Quay lại bước 3.
B4: Fact : = Tmp và kết thúc.
Bước 3: Chương trình.
Function Fact(n : byte):integer;
Var i, tmp : integer;
Begin
If n=0 then tmp:=1
Else
Begin
i:=0;
Tmp:=1;
While i < n do
Begin
i := i+1;
Tmp := tmp * i;
End;
End;
Fact : = tmp;
End;

Bước 4: Xây dựng bộ test.


N = 4;
i tmp
0 1
1 1
2 2
3 2*3
4 2*3*4

- Trang 46 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Họ và tên :Lê Thị Chung
Lớp:Tin 4b

Câu 3.22
Hãy viết chương trình nhập toạ độ hai đỉnh đối trên trái và dưới phải của một tứ giác lồi có
cạnh song song với trục toạ độ và có các toạ độ các đỉnh là nguyên. Kiểm tra xem tứ giác
này có phải là hình vuông hay không? Nếu đúng thì đưa ra thông báo ‘HÌNH VUÔNG’ và
diện tích của đường tròn nội tiếp. Trong trường hợp ngược lại đưa ra thông báo ‘CHỮ
NHẬT’ và diện tích của hình tròn ngoại tiếp.
Giải:
Bước 1:
- Input: Cho 2 đỉnh đối diện trên trái và dưới phải của tứ giác lồi có toạ độ là A(x1, y1),
B(x2, y2)
-Output: Đưa ra thông báo
Bước 2:
- Ý tưởng:
Gọi toạ độ đỉnh trên trái là (x1, y1) và toạ độ đỉnh dưới phải là(x2, y2).
Điều kiện để tứ giác là hình vuông là :|x2-x1|=|y2-y1|.Bán kính đường tròn cần tính bằng
một nửa cạnh hình vuông.Nếu không thoả mản điều kiện trên thì là hình chữ nhật có bán
kính bằng một nữa độ dài đường chéo.
-Giải thuật
B1: Nhập 2 điểm (x1, y1) và (x2, y2)
B2 : S1 :=sqr((x1-x2)/2)*3.14 ;
S2= :(sqr(x1-x2)+sqr(y1-y2))*3.14;
B3 : +Nếu abs(x1-x2)=abs(y1-y2) thì
thông báo ‘HÌNHVUÔNG’ và diện tích đường tròn nội tiếp là S1 ;
+Ngược lại thì thông báo ‘HÌNH CHỮ NHẬT ‘ và diện tích đường tròn ngoại tiếp là
S2
B4 :Kết thúc

- Trang 47 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
- Sơ đồ giải thuật

Begin

Nhập(x1, y1),
(x2, y2)

S1:=sqr((x1-x2)/2)*3.14
S2:=(sqr(x1-x2)+
sqr(y1-y2))*3.14

abs(x2-x1)
=abs(y2-
y1)
S
Đ

Thông báo ‘HV’ Thông


va S1 báo’HCN” và
S2

end

Bước 3 : Viết chương trình


var x1, x2, y1, y2:integer;
s1, s2:real;
begin
write('nhap toa do diem A:');
readln(x1, y1);
write('nhap toa do diem B:');

- Trang 48 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
readln(x2, y2);
s1:=sqr((x1-x2)/2)*3.14;
s2:=(sqr(x1-x2)+sqr(y1-y2)))*3.14 ;
if (abs(x1-x2)=abs(y1-y2)) then
write('HINH VUÔNG', 'có dien tich la', s1)
else
write('HINH CHƯ NHẬT', 'co dien tich la', s2);
readln
end.
Bước 4: Xây dựng bộ test

(x1, y1) (x2, y2) abs(x1-x2) abs(y1-y2) S1 S2 Kêt quả


(-2, 4) (6, -4) 8 8 50, 24 Hinh vuong
(-4, 4) (4, -2) 8 6 314 Chu nhat

Câu 4.43
Hãy lập trình:
 Nhập từ bàn phím số nguyên dương N(1<=N<=20) và N số nguyên
A1, A2, ..., AN
 Đưa ra màn hình số lượng Ai lẻ và bản thân các số Ai lẻ thep trình tự xuất hiện của
chúng trong dãy đã nhập.Nếu trong dãy đã nhập không có số lẻ nào thì đưa ra màn
hình kết quả là một số 0
Giải:
Bước 1: Xác định điều kiện bài toán
+Input:Số nguyên dương N(1<=N<=20), dãy giá trị A1, A2, ..., AN
+Output: Đưa ra màn hình các số Ai lẻ và số lượng các số lẻ
Bước 2:
-Ý tưởng: Dùng một biến đếm để đếm các số lẻ. Dùng một vòng lặp duyệt lần lượt từ
phần tử thứ 1 đến phần tử thư N.Nếu kiểm tra điều kiện:
A[i] mod 2=0 thì tăng biến đếm.Thoát khỏi vòng lặp thông báo đếm và các phần tử lẻ ra
màn hình.
-Giải thuật
B1: Nhập vào phần tử N.Kiểm tra đk nhập
Nếu (N<1) hoặc (N>20) thì yêu cầu nhập lai;
B2:for i:=1 to N
Nhập A[i]
B3: d:=0;
For i:=1 to N do
+Nếu A[i] mod 2<>0 thi
d:=d+1;
viết(a[i]);
+ngược lại:viết(‘0’);
B3:kết thúc

- Trang 49 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

-Sơ đồ giải thuật

begin

Nhap N

S
(N>=1)
and(N<=2
0)
Đ

Nhap A1., .AN

d:=0;i:=1;

(i<N)

i:=i+1
Đ S

(A[i]
mod
S 2<>0)
Đ

d:=d+1 viết(‘0’)

Thông báo d và
viết A[i]

End

- Trang 50 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

Bước 3: Viết chương trình

Var N, i, d:integer;
a:array[1..100] of integer;
begin
repeat
write('nhap songuyen duong');
readln(N);
until (N>=1) and (N<=20);
for i:=1 to N do
begin
write('nhap a[i]');
readln(a[i]);
end;
d:=0;
for i:=1 to N do
if (a[i]mod 2<>0) then
begin
d:=d+1;
write(a[i]);
end;
write('0');
readln
end.
Bước 4:
Xây dựng bộ test
N=9

i 1 2 3 4 5 6 7 8 9
A[i] 5 7 6 7 8 9 1 3 2
A[i] mod 2 1 1 0 1 0 1 1 1 0
d 1 2 2 3 3 4 5 6 6

Kết qủa:d=6;

- Trang 51 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Họ và Tên : Bùi Minh Phương
Lớp: Tin 4B

Bài tâp. 4.8 ( sách bài tập tin hoc lớp 11)
Bước1: * Xác định intput của bài toán
- Dãy số thực q=(q1,q2,…,qn) ( 2 n 100), |qi| <104,i=1,…,n.)
-Chương trình sau thực hiện việc tìm phần tử lớn nhất và lớn thứ hai của dãyq.
Program C4B8;
Var q:array[1..100] of real;
a,b:real;
n,i:integer;
BEGIN
write(‘ N= ‘ ); readln(n);
For i:=1 to n do
begin
Write(‘q[‘,i:2,’]= ‘); readln(q[i]);
end;
a:=q[1];
for i:=1 to n do
if a<q[i] then a:= q[i];
b:=-1.0e4 ;
for i:= 1 to n do
if (q[i])<a ) and ( a[i]>b) then b:=q[i];
writeln(‘A= ‘,a:10:4,’B= ‘,b:10:4);
END.
*Xác định output
Sửa lại chương trình trên để đưa ra phần tử nhỏ nhất và phần tử nhỏ thứ
hai khác phần tử nhỏ nhất .
Bước 2: Xây dựng ý tưởng giải thuật.
-Gán giá trị đầu tin của dãy bằng a a:= q[1];
-Duyệt với tất cả các phần tử còn lại và so sánh a với các phần tử còn lại để
tìm ra phần tử nhỏ nhất trong dãy.
-Gán b bằng một giá trị lớn nhất của dãy b:=+1.0e4;
-Duyệt với tất cả các phần tử còn lại của dãy và tìm ra phần tử nhỏ thứ hai

Bước 3: Chương trình:

Program C4B8;
Var q:array[1..100] of real;
a,b:real;
n,i:integer;
BEGIN
write(‘ N= ‘ ); readln(n);
For i:=1 to n do
begin

- Trang 52 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Write(‘q[‘,i:2,’]= ‘); readln(q[i]);
end;
a:=q[1];
for i:=1 to n do
if a>q[i] then a:= q[i];
b:=+1.0e4 ;
for i:= 1 to n do
if (q[i])>a) and ( a[i]<b) then b:=q[i];
writeln(‘A= ‘,a:10:4,’B= ‘,b:10:4);
END.
Bước 4: Mở rộng bài toán: Sửa lại chương trình trên để đưa ra phần tử nhỏ nhất và
phần tử lớn nhất của dãy
Baì tập 6.12 ( sách bài tập tin học 11)
Bước 1: *Xác địng intput của bài toán
-Cho hàm SUMGDIT(n) trả về giá trị là tổng các chữ số của n
-Cho số nguyên dương n với 0<n<2*109 và n Longint
-Chương trình kết thúc khi nhập vào số 0 hoặc số âm
*Xác định output
Đưa tổng các chữ số của n ra màn hình?
Bước 2: Xây dựng ý tưởng giải thuật
-Gán giá trị ban đầu S:=0;
-Chừng nào n >0 thì còn tiếp tục còn làm
+Gán s bằng s cộng với phần dư của n mod 10
+Gán n bằng phần nguyên của n div 10
- Trả về giá trị cho hàm bằng S.S=SUMGDIT(n);
*Sơ đồ khối

Bước 3 : Chương trình


Progam C6B12;
Var n: longint;

- Trang 53 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
FUNCTION SUMDIGIT(n:longint): integer;
Var s:longint;
Begin
S:=0;
While n>0 do
Begin
S: =S+n mod 10;
n:=n div 10;
End;
BEGIN
n:=1;
while n>0 do
begin
wite (‘ nhap gia tri n= ‘); readln(n);
if>0 then
wite( SUMDIGIT(n));
ed;
Readln;
END.

Bước 4: Bộ text

n S
11 0
1 1
0 2

- Trang 54 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Họ và tên: NGÔ ĐÌNH SỬ
Lớp: Tin 4b

Bài 4.13 sgk tin hoc 11


Bước1:
- Input: nhập k, q
- Output: chuẩn hóa qi
Bước 2:
- Xây dựng 1 mảng để lưu biến qi
- Tính tổng qi
- Sau do chuẩn hóa qi
Bước 3:
Var a: array [1.. 100] of integer;
S,i,k,q: integer;
qi: real;
Begin
Write(‘ nhap q’); readln(q);
Write(‘ nhap vao so phan tu:’); readln(k);
For i:=1 to k do
Begin
Write(‘nhap vao a[‘,i,’]; readln( a[i]);
End;
S:=0
For i:=1 to k do
S:= S + q*q;
For i:=1 to do
qi:=q/ sqrt(S);
for i:=1 to k do write(‘ sau khi chuan hoa:’,qi);
readln;
end.

Bài 6.17
Bước 1:
Input: b,n
Output : làm trơn b
Bước 2:
- xây dựng 1 mảng để lưu b[i]
- dùng các biến trung gian để lưu b[1] và b[n]
- duyệt qua tất cả các b[i]
- tinh b[i]= b[i]+b[i+1]+b[n]
Bước 3:

- Trang 55 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Type vector = array[1 ..100] of real;
var i,b: integer;
a: vector;
procedure smooth(var B:vector ;n: integer);
var i:integer;
Bo,tg1,tg2:real;
begin
Bo:=B[1];
tg1:=B[n];
for i:=1 to n-1 do
begin
tg2:=B[i];
B[i]:= (tg1 + B[i] + B[i+1]) / 3;
tg1:=tg2;
end;
B[n]:=(tg1 + B[n] + Bo)/3;
end;

BEGIN
write('nhap b:'); readln(b);
write('nhap cac phan tu cua mang:');
for i:=1 to b do
begin
write('nhap phan tu a[',i,']:'); readln(a[i]);
end;
smooth(a,b);
readln;
END.

- Trang 56 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
PHƯƠNG PHÁP GIẢI BÀI TẬP TIN HỌC
Họ và tên: Nguyễn Thanh Tú
Lớp: Tin 4B
Bài 4.32:
Bước 1: Xác định Input, Output
Input:
- Nhập hai số nguyên dương N, M
- Nhập dãy số thực A[1..N], B[1..M] (dãy B là dãy số tăng dần)
Output: Dãy D với:
- D[0]: Là số các số trong dãy A nhỏ hơn B[1]
- D[i]: Là số các số trong dãy A lớn hơn B[i] và nhỏ hơn hoặc bằng B[i+1]
- D[M+1]: Là số các chữ số trong dãy A lớn hơn B[M]
Bước 2: Ý tưởng giải thuật
- Nhập hai mảng số thực A[1..N], B[1..M]
 Dùng một vòng For để so sánh dãy A với B[1]
 Sau đó lưu vào D[0]
For i:= 1 to N do
if A[i] < B[1] then D[0]:=D[0]+1;
writeln('D[0] = ',D[0]);
 Dùng hai vòng For duyệt tất cả phần tử của dãy A với từng phần tử của
B.
 Sau đó lần lượt lưu vào dãy D
For i:= 1 to M-1 do
For j:= 1 to N do
if (A[j] >= B[i]) and (A[j]<B[i+1]) then D[i]:=D[i] + 1;
For i:=0 to M do
Write('D[',i,']= ',D[i]:3);
 Dùng một vòng For duyệt các phần tử của A so sánh với B[M]
For i:= 1 to N do
if A[i] < B[M] then D[M+1]:= D[M+1] + 1;
writeln('D[M+1]= ',d[M+1]);

- Xuất dãy số thực D (xuất mảng D)

Bước 3: Thuật toán


Program bai432;
Var A,B: array[1..50] of real;
D: array[0..50] of integer;
i,j,M,N: byte;
Begin
repeat
write(' nhap 2 so nguyen duong M,N: ');
readln(M,N);

- Trang 57 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
until (1<M) and (M<N) and (N<=50);
For i:= 1 to N do
Begin
write('A[',i,']= '); readln(A[i]);
End;
Write(‘B[1]= ‘); readln(B[1]);
For i:=2 to M do
Begin
repeat
write('B[',i,']= '); readln(B[i]);
until B[i]>B[i-1];
End;
{ so luong so trong day A nho hon B[1] }
For i:= 1 to N do
if A[i] < B[1] then D[0]:=D[0]+1;
writeln('D[0] = ',D[0]);
{ So luong so trong day A lon hon B[i] va nho hon
B[i+1] }
For i:= 1 to M-1 do
For j:= 1 to N do
if (A[j] >= B[i]) and (A[j]<B[i+1]) then D[i]:=D[i] +
1;
For i:=0 to M do
Write('D[',i,']= ',D[i]:3);
{ So luong so trong day A lon hon hoac bang B[m] }
For i:= 1 to N do
if A[i] < B[M] then D[M+1]:= D[M+1] + 1;
writeln('D[M+1]= ',d[M+1]);
{ day D duoc tao thanh: }
For i:=0 to M+1 do
writeln('D[',i,']= ',D[i]);
Readln;
End.
Bước 4:
- Xây dựng bộ Test:
i A[i] B[i] D[i]
0 2
1 5 7 0
2 6 9 1
3 2 11 0
4 (N) 25 17 0
5 10 20 0
6 (M) 22 0
7 (M+1) 1

- Trang 58 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
- Mở rộng bài toán:
 Mở rộng giải thuật:
 D[0]: Là số các số trong dãy A nhỏ hơn B[1] và là số chẳn
 D[i]: Là số các số trong dãy A lớn hơn B[i] và nhỏ hơn hoặc
bằng B[i+1] và là số lẻ
 D[M+1]: Là số các chữ số trong dãy A lớn hơn B[M] và là số
nguyên tố

 Xây dựng lớp bài toán tương đương


Tạo hai mảng A và B với các giá trị từ hàm Random(1000). Tạo
mảng mới C bằng cách lấy các số chẳn từ hai mảng trên.
Bài 7.20:
Bước 1:
Input: Tạo mảng hai chiều với giá trị của mảng là Random(10000);
Output: Vectơ U, V với
Ui: max(A[i,j]) j=1..10
Vi: min(A[i,j]) i=1..10
Bước 2: Ý tưởng giải thuật
- Dùng hai vòng for so sánh và tìm ra giá trị max(A[i,j]) với j=1..10
- Lưu lần lượt vào U[i]
For i:=1 to 10 do
Begin
U[i]:=a[i,1];
For j:= 1 to 10 do
if U[i] < A[i,j] then
U[i]:=A[i,j];
End;
- Dùng hai vòng for so sánh và tìm ra giá trị Min(A[i,j]) với j=1..10
- Lưu lần lượt vào V[i]
For i:=1 to 10 do
Begin
V[i]:=a[i,1];
For j:= 1 to 10 do
if V[i] > A[i,j] then
V[i]:=A[i,j];
End;
Bước 3: Thuật toán

program bai720;
Var i,j:byte;
A: array[1..10,1..10] of integer;
U,V: array[1..10] of integer;
Begin
For i:=1 to 10 do

- Trang 59 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
For j:=1 to 10 do
A[i,j]:= random(10000);
For i:=1 to 10 do
Begin
U[i]:=a[i,1];
For j:= 1 to 10 do
if U[i] < A[i,j] then
U[i]:=A[i,j];
End;
For i:=1 to 10 do
Begin
V[i]:=a[i,1];
For j:= 1 to 10 do
if V[i] > A[i,j] then
V[i]:=A[i,j];
End;
Writeln('_______________&&&&________________');
Write('Vecto U: ');
For i:=1 to 10 do
Write(U[i]:5,';');
Writeln;
Writeln('_______________&&&&________________');
Write('Vecto V: ');
For i:=1 to 10 do
Write(V[i]:5,';');
readln;
End.
Bước 4:
- Xây dựng bộ Test:
i/j 1 2 3 4 5 6 7 8 9 10
1 10 2 5 4 6 9 3 7 77 12
2 20 54 2 6 499 5 4 28 4 55
3 1 46 66 88 4 3 45 54 4 54
4 34 23 6 22 5 2 6 2 333 66
5 56 5 777 455 33 99 11 97 23 22
6 67 445 233 3333 65 5 433 33 2 333
7 6 77 909 44 232 225 5 56 0 44
8 676 888 99 995 33 90 66 445 35 34
9 98 3 556 777 33 3321 11 11 55 3445
10 2 6 499 433 33 2 333 445 35 34
U 77 499 88 333 777 3333 909 995 3445 499
V 676 888 909 3333 499 3321 433 445 333 3445

 Mở rộng giải thuật: Sắp xếp tăng dần và tính tích hai vectơ U và V

- Trang 60 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
 Xây dựng bài toán tương tự:
Cho mảng hai chiều A[1..10], hãy xây dựng vectơ X chứa các số lẽ hoặc số
nguyên tố hoặc số hoàn hảo từ mảng trên.

- Trang 61 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Họ Tên: Nguyễn Thị Hòa
Lớp : Tin 4b
Bài tập

Bài 3.40 Lập trình để giải bài toán sau : nhập số nguyên dương n từ bàn phím. Tìm số
nguyên k nhỏ nhất thỏa mãn điều kiện 3k > n. Đưa ra màn hình số k và giá trị 3k
Giải
Bước 1:
-Input : n;
-Output: k nhỏ nhất , giá trị 3 k
Bước 2: begin
Thuật toán
Bước 3:

nhập n

k:=0,gt:=1

S
gt<=n In k In giá tri 3k

Đ
end
gt:=gt*3;
k:=k+1

Chương trình
Program Giai_3.30;
Ues crt;
Var n, k: interger;
gt: longint;
Begin
Clrscr;
Write(‘ nhap gia tri n:’); readln(n);
k:= 0; gt:=1;
While gt <= n do
Begin
gt:= gt*3;
k:=k+1;
End;
Write(‘gia tri k la :’,k);

- Trang 62 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Write(‘gia tri 3k la:’,gt*3);
readln
end.
Bước 4:
Test
N=12 GT=1` K=0
1<=12 1*3 1
9<=12 3*3 2
27>12 9*3 3
gt=27>n=12
Vậy k bé nhất là 3
Giá trị 3k là 27

Bài 4.49
Bước 1
-Input: l, w, h (tương ứng chiều dài ,chiều rộng, chiều cao của hình hộp chữ nhật )
-Output: + số lượng thùng rỗng
+ số lượng thùng chiếm chỗ (số thùng còn lại không thể lồng vào nhau đựợc nữa)
Bước 2 :
Định hướng :
-Kiểm tra điều kiện nhập của hình hộp chữ nhật dung lệnh while, nhập hợp lệ khi (l >0) or
(w>0) or (h>0)
-Duyệt nhiều lần từ trái qua phải, đánh dấu những thùng đã lồng vào nhau bằng cách dùng
một mảng kiểm tra. để không xử lý ở những lần duyệt sau
Giải thuật :
b1. i:=1; d:=0; kt[i ]:=flase;
b2. Kiểm tra điều kiện nhập
while (a[i].l<>0) or (a[i].w<>0) or (a[i].h<>0) do. Chuyển sang bứơc 3, còn không kết thúc
nhập
b3. Nhập kích thước hình hộp chữ nhật
b4. for i:=1 to n-1 do
for j:= i+1 to n do
if (a[i].l < a[j].l) and (a[i].w < a[j].w) and (a[i].h < a[j].h) then
kt[i]:= true;
d:=d+1;
quay lại bước 4
b5. Đưa ra số thùng rỗng là i
Đưa ra số thùng chiếm chỗ là i-d
B6.Dừng
Bước 3: Chương trình
Program Giai_bai 4.49 ;
Use crt;
Type HHCN = record
l, w, h : integer;

- Trang 63 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
end;
Var a: array [1…100] of HHCN;
kt: array [1..100] of Boolean;
i, j, d, n:integer;

Begin
Clrscr;
i:=1
d:=0;
kt[i]:=false;
while (a[i].l<>0) or (a[i].w<>0) or (a[i].h<>0) do
begin
writeln (‘nhap kich thuoc cho hinh hop chu nhat :‘,i);
readln(a[i].l, a[i].w, a[i].h);
end;
i:=i+1;
writeln(‘ so luong thung rong :’,i-1);
for i:=1 to n-1 do
for j:= i+1 to n do
if (a[i].l < a[j].l) and (a[i].w < a[j].w) and (a[i].h < a[j].h) then
begin
kt[i]:= true;
d:=d+1;
end;
write(‘so thung chiem cho:’, i-d);
readln
end.

- Trang 64 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Sinh viên: Nguyễn Thị Huệ
Lớp : Tin4B

PHƯƠNG PHÁP GIẢI BÀI TẬP TIN HỌC

Bài 3.32: Xét dãy số nguyên A0,A1,A2,…,An, trong đó:


 A0 = p;
 A1 = q;

 An = A(n-2) + p nếu n chẵn;


A(n-2) + q nếu n lẻ;

Viết đoạn chương trình tính An với n >= 0 cho trước.

Phương pháp giải:


 B1: Tìm hiểu đề bài:
 Input: Nhập p, q.
 Output: giá trị An.
 B2: Ý tưởng giải thuật:
 Nhập A0= p, A1= q;
 Gán i:=0, A2:=0;
 Trong khi i<= n thì xét:
 Nếu (i mod 2 ) = 0 thì
A2 = A0 + p
 Nguợc lại thì
A2 = A0 + q;
 Gán lại A0:= A1; A1:= A2;
 i := i + 1;
 In ra màn hình giá trị của An.

 B3: Trình bày lời giải:


program bai332;
uses crt;
var
i, n, p, q: integer;
a0, a1, a2: integer;
Begin
Clrscr;
Write (‘Nhập vào giá trị của a0:’); readln(p);
Write (‘Nhập vào giá trị của a1:’); readln(q);
i:= 0; a2:= 0;
while (i <= n) do
begin
if (i mod 2 ) = 0 then

- Trang 65 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
a2: = a0 + p
else
a2: = a0 + q;
a0:= a1;
a1:= a2;
i:= i + 1;
end;
writeln(‘giá trị của số hạng thứ ’,n,’ là:’,a2);
readln;
End.
 B4:test
p=1;q=2; n=3

I A0 A1 A2
1 2
0 2 2 2
1 2 4 4
2 4 3 3
3 3 6 6

A3=6

Bài 4.51. Để chuẩn bị cho Hội Khỏe Phù Đổng, nhà trường có tổ chức cuộc thi
điền kinh chạy 100m, mọi học sinh đều có quyền đăng kí thực hiện. Mỗi người
dự thi có một phiếu đăng kí:
 Họ và tên : xâu không quá 35 kí tự
 Nam/ nữ : 1 kí tự
 Lớp : 3 kí tự
 Thời gian chạy (gy): số thực
Sau khi chạy tới đích, thời gian chạy sẽ được ghi vào phiếu đăng kí và
các phiếu này được nhập vào máy tính để xử lí. Các lớp có từ 3 học sinh nam
(nữ) tham dự trở lên được tính thành tích đồng đội nam (nữ). Thành tích thời
gian đồng đội là trung bình thời gian của các học sinh trong lớp.
a. Hãy xây dựng kiểu dữ liệu và khai báo các biến thích hợp;
b. Viết chương trình tính:
 Tổng số học sinh tham dự, số học sinh nam, số học sinh nữ.
 Danh sách các học sinh nam về nhất, bao gồm Họ và tên, lớp;
 Danh sách các học sinh nữ về nhất, bao gồm Họ và tên, lớp;
 Danh sách các lớp có từ 3 học sinh nam tham dự trở lên (để tính điểm đồng
đội);
 Danh sách các lớp có từ 3 học sinh nữ tham dự trở lên (để tính điểm đồng
đội);

Phương pháp giải:

- Trang 66 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
 B1: tìm hiểu đề bài:
 Input: nhập phiếu đăng kí bao gồm các trường: họ tên, giới tính, lớp,
thời gian chạy.
 Output:
o Tổng số học sinh tham dự, tổng số nam, tổng số nữ.
o Danh sách nam về nhất.
o Danh sách nữ về nhất.
o Danh sách lớp có 3 nam tham dự trở lên.
o Danh sách lớp có 3 nữ tham dự trở lên.
 B2: Ý tưởng giải thuật:
 Khai báo một bản ghi Hocsinh gồm các trường: hoten, giơitinh, lop,
tgchay.
 Khai báo biến : Hocsinh;
 mảng a: array [1..100] of Hocsinh;
 biến đếm tổng, đếm nam, đếm nữ tham dự.
 mảng b1,b2 :array [1..100] of integer; lưu lại số học sinh nam, nữ về
nhất.
 mảng dem_lop:array[1..100] of integer; phần tử dem_lop[i] lưu số
học sinh cùng lớp với học sinh a[i]
 i:=0; dem:=0;dnam:=0; dnu:=0;
 Nhập họ tên học sinh, giới tính(1-nam, 0-nữ), lớp, thời gian chạy của
học sinh được tính bằng giây. Lặp lại việc nhập cho đến khi nhập họ
tên= 0.
Mỗi lần nhập thì tăng biến dem lên 1(dem:=dem+1;)
 In ra tổng số học sinh tham dự chính bằng dem.
 Tổng số học sinh nam, nữ:
Duyệt từ i:=1 đến dem
Xét: nếu a[i].gioitinh=’0’ thì dnu:=dnu+1
Nguợc lại: dnam:=dnam+1;
In ra Tổng số nam: dnam
Tổng số nữ :dnu
 In ra danh sách nam về nhất:
Min1:= 10000; min2:=10000;
Duyệt từ i:=1 to dem thì xét:
Nếu a[i].gioitinh=’1’ thì xét:
Nếu a[i].tgchay<= min1 then
Min1:= a[i].tgchay;
J:=0;
Duyệt từ i:=1 đến dem thì xét:
Nếu a[i].giơitinh=’1’ thì xét
Nếu a[i].tgchay = min1 thì
j:=j+1;
b1[j]:=I;

- Trang 67 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
xét: -nếu chỉ có duy nhất một học sinh về nhất(j=1) thì in ra hoten, lop
của học sinh đó
- ngựoc lại nếu có nhiều học sinh cùng về nhất thì in
ra toàn bộ danh sách bao gồm: hoten, lop của các học sinh đó.
 In ra danh sách nữ về nhất: tương tự thuật toán in danh sách nam về
nhất, chỉ thay min1 bởi min2, a[i].gioitinh=’0’.
 In danh sách các lớp có từ 3 học sinh nam tham dự trở lên:
 Khai báo mảng dem_lop:array [1..100] of integer; phần tử
dem_lop[i]:lưu số học sinh cùng lớp với học sinh a[i]
 Khai báo mảng kt_lop:array[1..100] of boolean; với mỗi kt_lop[i]: =
false để gán cho học sinh a[i] chưa cùng lớp với học sinh nào.
 Duyệt từ i:=1 đến dem rồi gán dem_lop[i]:=0; kt_lop[i]:=false;
 Duyệt từ i:=1 đến dem- 1 thì xét
 Nếu kt_lop[i] = false thì
Duyệt từ j:=i+1 đến dem thì xét
Nếu (a[i].lop=a[j].lop) và (a[i].gioitinh= ‘1’) và
(a[j].gioitinh=’1’) thì thực hiện:
Dem_lop[i]:=dem_lop[i]+1;
Kt_lop[j]:= true;
 Duyệt từ i:=1 to dem thì
Nếu dem_lop[i]>=2 thì
In ra lop có số học sinh nam tham dự từ 3 trở lên.
 In danh sách các lớp có từ 3 học sinh nữ tham dự trở lên:
 Tương tự in danh sách lớp có từ 3 học sinh nam trở lên, chỉ khác là thay
a[i].gioitinh=’0’.

 B3: Trình bày lời giải:


program bai451;
uses crt;
type hocsinh = record
hoten: string[35];
gioitinh: string[1];
lop: string[3];
tgchay: real;
end;
var a: array[1..100] of hocsinh;
b1 : array[1..100]of integer;
b2: array[1..100] of integer;
dem_lop:array[1..100] of integer;
kt_lop:array[1..100] of boolean;
hs: hocsinh;
i,j, dem,dnam,dnu: integer;
kthuc:boolean;
min1,min2:real;

- Trang 68 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
begin
clrscr;
i:= 0; dem:= 0;
dnam:=0; dnu:=0;
with hs do
repeat
write('Nhap ho ten( 0 de ket thuc!)');
readln(hoten);
if hoten <> '0' then
begin
write('Gioi tinh(nhap 1_nam, 0_nu):');readln(gioitinh);
write('lop:');readln(lop);
write('Nhap vao thoi gian chay:');readln(tgchay);
dem:= dem +1;
end;
until hoten= '0';
{*************************************}
{Tong so hoc sinh du thi, tong so nam, tong so nu}
writeln('Tong so hoc sinh du thi:',dem);
for i:=1 to dem do
if (a[i].gioitinh='0') then
dnu:=dnu+1
else
dnam:=dnam+1;
writeln('So hoc sinh nam du thi:',dnam);
writeln('So hoc sinh nu du thi:',dnu);
{**************************************}
{Danh sach cac hoc sinh nam ve nhat}
min1:=10000;
for i:=1 to dem do
if( a[i].gioitinh = '1')then
if a[i].tgchay <= min1 then
min1:=a[i].tgchay;
j:=0;
for i:=1 to dem do
if a[i].gioitinh = '1' then
begin
j:=j+1;
b1[j]:=i;
end;
if j=1 then
writeln(a[b1[1]].hoten,a[b1[1]].lop)
else
for i:=1 to j do

- Trang 69 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
begin
writeln('Cac hoc sinh nam ve nhat:');
writeln(a[b1[i]].hoten, a[b1[i]].lop);
end;
{********************************************}
{Danh sach cac hoc sinh nu ve nhat}
min2:=10000;
for i:=1 to dem do
if( a[i].gioitinh = '0')then
if a[i].tgchay <= min2 then
min2:=a[i].tgchay;
j:=0;
for i:=1 to dem do
if a[i].gioitinh = '0' then
begin
j:=j+1;
b2[j]:=i;
end;
if j=1 then
writeln(a[b2[1]].hoten,a[b2[1]].lop)
else
for i:=1 to j do
begin
writeln('Cac hoc sinh nu ve nhat:');
writeln(a[b2[i]].hoten, a[b2[i]].lop);
end;
{************************************}
{Danh sach cac lop co tu 3 hoc sinh nam tro len}
for i:=1 to dem do
dem_lop[i]:=0;
for i:=1 to dem do
kt_lop[i]:=false;
for i:=1 to dem-1 do
begin
if kt_lop[i]= false then
for j:=i+1 to dem do
if (a[i].lop=a[j].lop)and (a[i].gioitinh='1')and (a[j].gioitinh='1') then
begin
dem_lop[i]:= dem_lop[i]+1;
kt_lop[j]:= true;
end;
for i:=1 to dem do
if dem_lop[i]>=2 then
writeln(a[i].lop);

- Trang 70 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
end;
{***************************************}
{Danh sach cac lop co tu 3 hoc sinh nu tham du tro len}
for i:=1 to dem do
dem_lop[i]:=0;
for i:=1 to dem do
kt_lop[i]:=false;
for i:=1 to dem-1 do
begin
if kt_lop[i]= false then
for j:=i+1 to dem do
if (a[i].lop=a[j].lop)and (a[i].gioitinh='0')and (a[j].gioitinh='0') then
begin
dem_lop[i]:= dem_lop[i]+1;
kt_lop[j]:= true;
end;
for i:=1 to dem do
if dem_lop[i]>=2 then
writeln(a[i].lop);
end;
readln;
end.
 Bước 4: bài toán mở rộng tương tự: viết chương trình đánh giá thành tích của
một đội bóng gồm các nội dung sau:
 Nhập họ tên, tuổi, số bàn thắng của từng cầu thủ.
 In ra màn hình:
o Cầu thủ có tuổi lớn nhất.
o Cầu thủ có tuổi nhỏ nhất.
o Cầu thủ có số bàn thắng nhiều nhất.
o Cầu thủ có số bàn thắng ít nhất.
o Số bàn thắng trung bình của toàn đội.

- Trang 71 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Nguyễn Thị Lan Anh_Tin 4B

Bài 3.15
Bước 1: Tìm hiểu đề bài
- Input : x, y, u, v.
- Output: (x, y) hoặc (u, v).
Bước 2: Xây dựng giải thuật
B1: Nhập x, y, u, v.
B2: Tính
Da := sqrt(sqr(x) + sqr(y));
Db := sqrt(sqr(u) + sqr(v));
B3: Nếu Da > Db thì đưa ra toạ độ (x, y)
Còn không thì đưa ra toạ độ (u, v).
B4: kết thúc.
Bước 3: Chương trình.
Program bai315;
var x, y, u, v: integer;
Da, Db : real;
begin
Write('Nhap toa do x, y: '); readln(x,y);
Write('Nhap toa do u, v: '); readln(u,v);
Da := sqrt(sqr(x) + sqr(y));
Db := sqrt(sqr(u) + sqr(v));
if Da>=Db then write('Toa do diem gan O la: ',x,y)
else write('Toa do diem gan O la: ',u,v);
readln;
end.

Bước 4: Xây dựng bộ test.


A(3,4) B(6,8)
Da = 5Db = 10
 In ra (6,8).

- Trang 72 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Bài 4.36
Bước 1: Tìm hiểu đề bài
- Input : a1, a2, ….. an
- Output: ai và i thoả ai là cực đại địa phương.
Bước 2: Xây dựng giải thuật
B1: Nhập dãy A: a1, a2,…
B2: Xét a1.
- Nếu a1 > a2 thì in ra màn hình a1 và 1.
B3: Xét a2 đến an-1.
- Nếu ai>ai-1 và ai>ai+1 thì in ra màn hình ai và i.
B4: Xét an.
- Nếu an>an-1 thì in ra an và n.
B5: Dừng.
Bước 3: Chương trình.
program bai436;
var a:array[1..100] of integer;
i,n: integer;
Begin
write('nhap n='); readln(n);
For i:=1 to n do
begin
write('nhap phan tu thu ',i,':');
readln(a[i]);
end;
If a[1] > a[2] then writeln(a[1],'1');
For i:=2 to n-1 do
if (a[i]>a[i-1])and(a[i]>a[i+1]) then writeln(a[i],i);
If a[n] > a[n-1] then writeln(a[n],n);
readln;
End.
Bước 4: Xây dựng bộ test.
n=7
a[1]= 4, a[2]=6, a[3]=7, a[4]=6, a[5]=45, a[6]=34, a[7]=54.
 in ra 7,3
45,5
54,7

- Trang 73 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Họ và tên: Nguyễn Thị Thanh (12/03/1985)
Lớp: Tin 4B

Bài tập
Bài 1 (4.23 SBT11 trang 36):
Theo dương lịch năm được biểu diễn bằng một số nguyên. Theo âm lịch, năm được gọi theo
can và chi. Ví dụ, năm dương lịch 2006 được gọi theo âm lịch là Bính Tuất, trong đó Bính
là can và Tuất và chi.
Có tất cả 10 chi: Giáp, Ất, Bính, Đinh, Mậu, Kỉ, Canh , Tân, Nhân, Quý.
Có 12 chi: Tí, Sửu, Dần, Mão, Thìn, Tỵ, Ngọ, Mùi, Thân, Dậu, Tuất, Hợi.
Can và chi được lấy lần lượt theo chiều kim đồng hồ. Ví dụ, năm 2006 là Bính Tuất, năm
2007 là Đinh Hợi, năm 2008 là Mậu Tí, …
Hãy lập trình:
 Nhập vào từ bàn phím một năm dương lịch;
 Đưa ra màn hình tên gọi năm âm lịch tương ứng (dưới dạng tiếng Việt không dấu).
Chương trình cho phép lần lượt nhập các năm và đưa ra kết quả tương ứng cho đến
khi năm nhập vào là số nhỏ hơn hoặc bằng 0 thì kết thúc.
Bài 2 (6.21 SBT11 trang 66):
Cho dãy số thực a={a1, a2, …, an}. Hãy mô tả thủ tục XOA (a, n, x, y, m) dùng để xóa các số
ai thõa mãn điều kiện x ai y, m là kích thước mới của a sau khi xóa.
Bài làm:
 Bài 1:
 Bước 1:
Input: nhập vào từ bàn phím một năm dương lịch.
Output: đưa ra màn hình tên gọi năm âm lịch tương ứng.
 Bước 2:
- Ý tướng giải thuật:
B1: Gán Nam:=1;
B2: Chừng nào Nam > 0 thì:
+ Nhập Nam;
+ Nếu Nam > 0 thì
+ i:= Nam mod 10;
+ j:= Nam mod 12;
+ In ra can chi ;
+ Ngược lại: dừng
B3: dừng.
- Sơ đố khối

- Trang 74 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

 Bước 3: Chương trình

Program Canchi;
Const
Can: array[0..9] of string=(‘Canh’, ‘Tan’, ‘Nham’, ‘Quy’, ‘Giap’, ‘At’, ‘Binh’,
‘Dinh’, ‘Mau’, ‘Ki’);
Chi: array[0..11] of string=(‘Than’, ‘Dau’, ‘Tuat’, ‘Hoi’, ‘Ti’, ‘Suu’, ‘Dan’, ‘Mao’,
‘Thin’, ‘Ty’, ‘Ngo’, ‘Mui’);
Var Nam:integer;
i,j:byte;

Begin
Nam:=1;
While Nam > 0 do
begin
write (‘nhap nam duong lich: ‘); readln (Nam);
if Nam > 0 then
begin
i:=Nam mod 10;
j:=Nam mod 12;
writeln (‘--->’, Can[i], ‘ ‘, Chi[j] );
end;

- Trang 75 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
end;
End.

 Bước 4: Nghiên cứu về lời giải


Dựa vào số dư của phép chia số nguyên biễu diễn năm dương lịch cho 10 và 12 để xác định
Can và Chi.
Nam mod 12 Chi
0 Than
1 Dau
2 Tuat
3 Hoi
4 Ti
5 Suu
6 Dan
7 Mao
8 Thin
9 Ty
10 Ngo
11 Mui

- Text:
Nam i:=Nam mod 10 j:=Nam mod 12 In ra Can Chi
2008 i=8 ->Mau j=4 ->Ti Mau Ti
 Bài 2:
 Bước 1:
Input: dãy số thực a={a1, a2,…, an}
Output: dãy sau khi xóa
 Bước 2:
-Ý tưởng giải thuật
+B1: Gán dem:=n; i:=1;
+B2: Chừng nào i<=dem thì
+ Nếu a[i] in [‘x’..’y’] thì
dem:=dem-1;
khi nào i<dem thì a[j]:=a[j+1]
+ Ngược lại: tăng i lên;
Dãy sau khi xóa sẽ là: m:=dem;
+B3: dừng.
-Sơ đồ khối

- Trang 76 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

 Bước 3: Chương trình

Procedure XOA(a, n, x, y, m);


Var i, dem: integer;
Begin
dem:=n;
i:=1;
while i<= dem do
begin
if (a[i]>=x) and (a[i]<=y) then
begin
dem:=dem-1;
for j:=i to dem do a[j]:=a[j+1];
end

- Trang 77 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
else
i:=i+1;
end;
m:=dem;
End.
 Bước 4: Nghiên cứu về lời giải
Text:
n=6, a=(1, 5, 7, 9, 4, 2), x=3, y=5
+ dem=6, i=1
i=2, dem=5, a=(1, 7, 9, 4, 2)
i=3
i=4, dem=4, a=(1, 7, 9, 2)

- Trang 78 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

PHƯƠNG PHÁP GIẢI BÀI TẬP TIN HỌC

Họ và tên: Nguyễn Thị Thu Hà


Lớp : Tin 4B

Bài làm
Bài 3.25(sách bài tập 11).
bước 1:
- Input: Nhập số nguyên N (0< N <=32767)
-Output: Đưa ra màn hình số chử số 0 có nghĩa của N
-Yêu cầu của bài toán nghĩa là đếm chử số 0 mà N có được.
bước 2:
- Ý tưởng giải thuật:
+ Dùng biến đếm để đếm tất cả các chử số 0 có nghĩa của N
+ Lấy N chia cho 10, nếu phần dư của phép chia bằng 0 thì tăng biến đếm lên
một.
+ Gán lại N bằng cách lấy N chia cho 10 mà lấy kết quả phần nguyên của
phép chia.
+ Lặp lại nếu 0< N<= 32767.
- Thuật toán:

Begin

Nhập N;Dem:=0;

N>0 and N<=32767

N mod 10 = 0 Đưa ra dem

N:= N div 10 end

bước 3:

- Trang 79 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
var N, dem: Interger;
Begin
Write(‘ Nhập số nguyên N: ’); readln(N);
Dem:=0;
While (N<0) and (N<= 32767) do
begin
If (N mod 10 = =0) then dem:= dem + 1;
N:= N div 10;
end;
writeln(‘ Số chử số 0 có nghĩa là: ’, dem);
End.
bước 4:
- Test:
Nhập N: 100235
Dem:=0
0< N< 32767 đúng
N mod 10 = = 5
N:= 10023
Lặp lại vòng while
0<10023<32767 đúng
10023 mod 10 = = 3
N:= 1002
Lặp lại vòng while
0<1002<32767 đúng
1002 mod 10 = = 2
N:= 100
Lặp lại vòng while
0<100<32767 đúng
100 mod 10= = 0
Dem:= 0 + 1
N:= 10
Lặp lại vòng while
0<10<32767 đúng
10 mod 10 = = 0
Dem:= 1 +1
N:= 1
Lặp lại vòng while
0<1<32767 đúng
1 mod 10 = = 1
N:= 0
Lặp lại vòng while
0<0 sai
Thoát khỏi vòng while
In ra dem : 2

- Trang 80 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Kết thúc chương trình.

Bài 4.26(sách bài tập 11)

bước 1:
Input: - Số nguyên N (1 < N <= 20)
- Số thực B1, B2, … BN, mỗi số không quá hai số lẻ sau dấu chấm thập phân.
Output: - Số nguyên K là số lượng số trong dãy có giá trị nhỏ hơn số bên trái cạnh
nó.
- Số thứ tự i
- Số thực Bi
bước 2:
- Ý tưởng giải thuật:
+ Duyệt hết tất cả các phần tử trong dãy
+ Lần lượt so sánh hai phần tử cạnh kề nhau
. Nếu phần tử đứng sau nhỏ hơn phần tử đứng trước
thì đưa ra vị trí i và phần tử Bi đó, sau đó tăng K lên 1.
. Tiếp tục so sánh cho đến khi hết các phần tử trong dãy.
+ Đưa ra K số trong dãy thoả mãn.
- Thuật toán:
Begin

Nhập N; Nhập mảng ; K:= 0; i:= 2;

(i>1) and (i<= N) in K


end

A[i-1]>A[i] i:=i+1;

in i; in Bi;

K:= K+1;i:=i+1;

- Trang 81 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
bước 3:
var A: array[1..50] of real;
N, i, K: Interger;
Begin
Write(‘ Nhập số nguyên N: ’);
Readln(N);
Write(‘A[,’i,’]:’);
For i:= 1 to N do readln(A[i]);
K:= 0;
i:= 2;
While (i>1) and (i<=N) do
If A[i-1] > A[i] then
Begin
Writeln(‘số đó ở vị trí thứ:’,i);
Writeln(‘phần tử đó là:’, A[i]);
K:= K+ 1;
i:=i+1;
end
else
i:=i+1;

writeln(‘có .K. số trong dãy có giá trị nhỏ hơn số bên trái cạnh nó’);
End.
bước 4:
Test:
Nhập N: 5
Nhập Bi:
B1: 3.02
B2: 4.00
B3: 2.34
B4: 5.69
B5: 1.15
( ta được dãy phần tử Bi: 3.02 4.00 2.34 5.69 1.15 )
K:= 0
i:= 2;
(Thực hiện vòng while)
(i>1) và (i<=5) thoả điều kiện
(Thực hiện câu lệnh if)
3.02>4.00 sai
i:=i+1=2+1= 3
(Thực hiện lại vòng while)
3<5 thoả điều kiện
(Thực hiện câu lênh if)
4.00>2.34 đúng

- Trang 82 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
In ra vị trí i: 3
Phần tử B3: 2.34
K:= 0+1 = 1
i:= 3+1 = 4
(thực hiện vòng while)
4<5 thoả điều kiện
(Thực hiện câu lệnh if)
2.34>5.69 sai
i:= 4+1= 5
(thực hiện vòng while)
5 = 5 thoả điều kiện
(Thực hiện câu lệnh if)
5.69>1.15 thoả điều kiện
In ra vị trí i: 5
Phần tử B 5: 1.15
K:= 1+1= 2
i:= 5+1= 6

(Thực hiện vòng while)


6>5 không thoả mãn
Kết thúc vòng while
Có 2 số trong dãy có giá trị nhỏ hơn số bên trái cạnh nó
Kết thúc chương trình.
-Mở rộng bài toán
+ Tìm trong dãy đã cho có giá trị X cho trước không, nếu có đưa ra vị trí của
gí trị X trong dãy.
+ Tìm và in ra dãy con tăng trên một hàng
+ Tìm và in ra dãy con giảm trên một hàng
+ Tìm và in ra các dãy con tăng/ giảm có tổng của các phần tửlà lớn nhất/ bé
nhất
+Sắp xếp dãy đã cho theo thứ rự tăng/ giảm.

- Trang 83 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
HỌ VÀ TÊN : NGUYỄN THỊ TRÀ MY
LỚP 4B
KHOA TIN HỌC
TRƯỜNG ĐHSP HUẾ

BÀI TẬP GIÁO KHOA TIN HỌC 11


( Số lượng: 2 bài 5.15 & 3.42)

Bài 3.42 Cho điểm A nằm trên trục 0x và có toạ độ (Xa,0), điểm B nằm trên trục 0y và có
toạ độ (0,Yb), Xa,Yb nhận giá trị nguyên. Hãy xác định xem hai điểm Avà B cùng thuộc góc
phần tư nào của mặt phẳng toạ độ? Nêu hai điểm A và B đồng thời thuộc nhiều góc phần tư
khác nhau thì quy ước là chúng thuộc góc phần tư có thứ tự nhỏ nhất. Ở hình 16, các điểm A
và B cùng thuộc góc phần tư thứ I. Hãy viết chương trình xác định góc phần tư mà hai điỉem
A và B cùng thuộc.
Giải
* A( Xa,0) và B( 0, Yb) là hai điểm thuộc hệ toạ độ 0xy thì có các trường hợp sau :
- nếu Xa>0 và Yb>0 thì A,B thuộc góc phần tư I
- nếu Xa<0 và Yb>0 thì A,B thuộc góc phần tư II
- nếu Xa<0 và Yb<0 thì A,B thuộc góc phần tư III
- nếu Xa>0 và Yb<0 thì A,B thuộc góc phần tư IV
- nếu Xa=Yb=0 thì A,B thuộc góc phần tư thứ I ( A trùng B trùng với gốc toạ độ )
- nếu (Xa=0 và Yb>0) hoặc (Yb=0 và Xa>0 ) thì A,B thuộc góc phần tư I
* viết chương trình xác định góc phần tư mà hai điểm A, B cùng thuộc là góc phần tư I
( hình 16-trang 27 –sách btth 11)
Bước1: xác định bài toán
- input: nhập Xa, Yb
- output: thông báo A,B cùng thuộc góc phần tư I hoặc không cùng thuộc góc phần tư
này
Bước 2: xác định giải thuật
- nhập Xa, Yb
- sử dụng câu lệnh IF để kiểm tra các trường hợp mà A,B cùng thuộc góc phần tư I đã
nêu ở trên
- thông báo kết quả kiểm tra
Sơ đồ khối:

- Trang 84 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

Bước 3: viết chương trình

Program 3-42;
Ues crt;
Var Xa, Yb: integer;
Begin
Write ( ‘ nhâp hoanh do cua diem A la:’); readln( Xa);
Write ( ‘ nhâp tung do cua diem B la:’); readln( Yb);
If (Xa>=0 ) then
Begin
If ( Yb>=0) then writeln ( ‘ A, B thuoc goc phan tu thu I’)
Else writeln (‘ khong thuoc ‘);
End
Else writeln ( ‘ A, B khong thuoc goc phan tu I’) ;
End.
Bài 5.15 Đường viền trang trí ở nền nha có kích thước 2* N , được lát bằng hai loại kích
thước 1*2, 2*2. Hãy xác định số cách lát khác nhau có thể thực hiện được.
Hãy lập trình :
-đọc dữ liệu từ tệp văn bản TILE.INP gồm nhiều dòng, mỗi dòng chứa mọt số nguyên N
( 1<N<=20)
- đưa ra tệp văn bản TILE.OUT các kết quả tìm được, mỗi số trên mọt dòng .
giải:
* xác định số cách lát
-gọi n là kích thước của đường viền trang trí của nền nhà cần phải lót gạch.
- Sn là số cách lót có thể thực hiện được
Theo giải thiết đường viền có kich thước 2*n, và chỉ có thể lót được hai loại gạch là: 1*2 và
2*2, ta xét các trường hợp có thể có:
Xét n=1  S1=1
n=2  S2=3
n=3  S3=5
n=4  S4=10
….
n=k  Sk= Sk-1+ 2* Sk-2
* viết chương trình
Bước 1: xác định bài toán
-input: nhập n ( 1<n<= 20) từ tệp TILE.INP
-output: In ra số cách có thể thực hiện được trên tệp TILR.OUP
Bước 2: Xây dựng giải thuật
thực hiện việc thực hiên các bước dưới đây cho mỗi giá trị n được đọc từ tệp TILE.INP và
ghi kết quả S vào tệp TILE.OUP, lặp lại chi đến khi hết gía trị trong tệp đã đọc
B1: nhập n
B2: nếu n=2 thì S:=3;
S1:=1; S2:=3

- Trang 85 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
B3: nếu n>=3 thì
i:=3;
S:=2*S1+S2;
S1:=S2;
S2:=S;
i := i+1;
quay lại B3

B4: in S, kết thúc


* Sơ đồ khối

* viết chương trình


Program 5-15;
Var S1,S2,S: longint;
n ,i: integẻ;
fi, fo : tẽt;
begin
assign( fi, ‘tile.inp’);
reset( fi);
assign( fo, ‘tile.oup’);

- Trang 86 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
rewrite(fo);
While not eof (fi) do
Begin
Readln(fi, n);
If n=2 then S:=3;
S1:= 1;
S2:=3;
For i:= 3 to n do
Begin
S:=S2+ 2*S1;
S1:=S2;
S2:=S;
End;
Writeln( fo, S);
End;
Close (fi);
Close(fo);
End.

- Trang 87 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
BÀI TẬP PHƯƠNG PHÁP GIẢI BÀI TẬP TIN HỌC

Họ tên: Nguyễn Văn Cần


Lớp : Tin 4B

Bài 3.21: Viết đoạn chương trình dùng câu lệnh IF tính:

x + y nếu x > 1 và y > 1


v:= x – y nếu x > 1 và y <= 1
- x + y nếu x <= 1 và y > 0
- x - y nếu x <1 và y <=0
Bài giải:
 Bước 1: Xác định Input, Output
- Input: x,y;
- Output: v;
 Bước 2: Ý tưởng thuật toán:
B1: Đọc giá trị x, y nhập vào
B2: Xét giá trị x,y
- Tính v:
 V := x + y nếu x > 1 và y > 1. Chuyển qua bước 3;
 V := x – y nếu x > 1 và y <= 1;Chuyển qua bước 3;
 V := - x + y nếu x <= 1 và y > 0;Chuyển qua bước 3;
 V := - x - y nếu x <1 và y <=0;Chuyển qua bước 3;
B3: In giá trị của v
 Bước 3: Chương trình
If (x > 1) and (y > 1) then v:=x + y
Else
If (x > 1) and (y <= 1) then v:=x - y
Else
If (x <= 1) and (y <=0 ) then v:=x + y
Else v:= - x – y;
Writeln(‘ Gia tri cua ham la ‘,v);
Hoặc:
If (x > 1) and (y > 1) then v:=x + y ;
If (x > 1) and (y <= 1) then v:=x + y ;
If (x <= 1) and (y >0) then v:=x + y ;
If (x <= 1) and (y <=0) then v:=x + y ;
 Bước 4:Thiết kế bài tập tương tự:
Tính giá trị của y
x – 1 nếu x>=1;
Y= x+ 1 nếu (x>=0) và (x<1)
– x – 1 nếu (x<0)
Bài 4.42: Xâu đá quý:

 Bước 1: Xác định Input, Output

- Trang 88 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
- Input: xâu s;
- Output: các vị trí có thể mở vòng;
 Bước 2: Ý tưởng thuật toán:
- B1: Đọc giá trị xâu s nhập vào
- B2: sovt=0;i:=1;
- B3:
 Tại mỗi vị trí i: ta tiến hành xây dựng một xâu mới s1(tạm)
như sau:
 S1:=Copy(s,I,length(s)-i+1) + copy(s,1,i-1);
 Kiểm tra xâu s1 có phải là xâu đối xứng hay không?
 Nếu s1 là xâu đối xứng thì : Tăng giá trị của sovt lên 1;
 i:=i+1; Nếu i<length(s) thì quay lại bước 3 còn không thì
chuyển qua bước 4.
- B4: In ra số vị trí
 Bước 3: Chương trình
Program Xaudoixung;{chương trình in ra các vị trí mở vòng}
var a:array[1..100] of real;s,s1,s2:string;i,n,j:integer;
Begin
write('Nhap mot xau '); Readln(s);
n:=0;
for i:=1 to length(s) do
begin
s2:='';
S1:=copy(s,I,length(s)-i+1)+ copy(s,1,i-1);
for j:= length(s1) downto 1 do
s2:=s2+s1[j];
if s1=s2 then
begin
inc(n);
if length(s) mod 2 =0 then
a[n]:=i-0.5
else a[n]:=0;
end;
end;
if n=0 then write('khong co vi tri mo vong ')
else
begin
Writeln(' Cac vi tri mo vong ');
for i:=1 to n do write(a[i]:5:1);
end;
readln;
End.

Program Xaudoixung;{chương trình in ra số vị trí mở vòng}


var ;s,s1,s2:string;i,sovt,j:integer;
Begin
write('Nhap mot xau '); Readln(s);

- Trang 89 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
sovt:=0;
for i:=1 to length(s) do
begin
s2:='';
S1:=copy(s,I,length(s)-i+1)+ copy(s,1,i-1);
for j:= length(s1) downto 1 do
s2:=s2+s1[j];
if s1=s2 then
inc(n);
end;
if n=0 then write('khong co vi tri mo vong ')
else
Writeln(' so vi tri vi tri mo vong ',sovt);

readln;
End.

 Bước 4:Thiết kế bài tập tương tự:


Bộ test:
Xâu :’2222335533’ thì số vị trí mở vòng là 2 (sau 3 và sau 9)
Xâu:’1122211’ thì số vị trí mở vòng là 1( đầu xâu)
Nhập một xâu, hãy xác định các vị trí của một xâu con (nhập vào từ bàn phím) trong xâu
đó và in ra các xâu đó (nếu có)

- Trang 90 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Sinh viên: Phạm Văn Rin
Lớp Tin 4B
Bài Làm
Bài 4.12
Bước1:
Input : Nhập vào dãu số nguyên P=( p1, p1,…,pn).
Output:Dãy số P sau khi đã hoán đổi phần tử lớn nhất có chỉ số nhỏ nhất với phần tử
nhỏ nhất có chỉ số lớn nhất.
Bước 2: Sơ đồ khối

Bước 3: Viết Chương trình:


Uses crt;
Var
A: array [1..100] of byte;
i, j, min, max, tg : byte;
Begin

- Trang 91 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Write(‘ nhap vao n:’); Readln(n);
For i:= 1 to n do
Begin
Write (‘ nhap phan tu thu ‘,i,’:’);
Readln(A[i]);
End;
Min:= n; max:= 1;
For i:= 2 to n do
If ( max< A[i] ) then max:= i;
For j:= n-1 downto 1 to
If ( min > A[j] ) then min:= j;
Tg: = A[min];
A[min]:= A[max];
A[max]:= tg;
For i:= 1 to n do
Write( ‘ phan tu thu ‘,i,’ la: ‘, A[i]:8:2);
Readln;
End.
Bước 4:
- Xây dựng bộ Test:
Nhập vào mảngA gồm các phần tử A =( 3, 4, 3, 5, 9, 7, 9)
Tìm max:
Max:= 1; A[max]=A[1]=3

i A[i] A[i] >A[max] max


2 4 T 2
3 3 F 2
4 5 T 4
5 9 T 5
6 7 F 5
7 9 F 5
Min:= 7; A[min]=A[7]=9

J A[j] A[j] <min min


6 7 T 6
5 9 F 6
4 5 T 4
3 3 T 3
2 4 F 3
1 3 F 3
Mảng A sau khi hoán đổi: A= ( 3, 4, 9, 5, 3, 7, 9)
Mở rộng bài toán:
+ Có thể giải bài toán bằng cách thay vòng lặp For bằng vòng lặp While.
+ Có thể chỉ duyệt từ một phía của mảng A.

- Trang 92 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Bài 6.16
Bước 1: Xác định Input và Output:
Input:
- Mảng A= ( a1, a2,…, an).
- Số nguyên n (1 <= n<= 100).
- Tệp văn bản VTA. INP
Output:
- MinA, maxA, TB
Bước 2: Ý tưởng giải thuật
- Sử dụng các vòng lặp để tìm min, max của A.
- Để tính trung bình của A, ta sử dụng 1 biến để lưu tổng giá trị các phấn tử của A .
Trung bình của A được tính theo công thức: TB = Tổng giá trị/ Số phần tử.
Thuật toán tìm minA, max
B1: Đọc tệp văn bản lưu vào biến mảng A.
B2: Gán maxA: = A[1]; minA:= A[1]; i:= 1; tong:= A[1]; dem:= 1;
B3: Chừng nào ( i<= n ) thì:
- Nếu maxA < A[i] thì gán maxA:= A[i];
- Nếu minA > A[i] thì gán minA:= A[i];
- Tong := tong + A[i];
- i:= i+ 1;
Quay lại bứớc 3.
B4: Tính TB:= Tong/ n;
B5: Thông báo kết quả: maxA, minA, TB và kết thúc.
Bước 3: Chương trình:
Program btap;
Type vector = array [1..100] of real;
Var A: vector; f:text;
N, s,i ,j: byte; minA, maxA, TB : real;
Procedure MNT( var A: vector; n: byte; var minA, maxA, TB: real);
Begin
minA:= A[1]; max:= A[1]; tong:= A[1]; i:=2;
While ( i < = n) do
Begin
If maxA < A[i] then maxA:= A[i];
If minA > A[i] then minA := A[i];
tong:= tong + A[i];
i:=i+ 1;
End;
TB := tong/ n;
Writeln(‘ gia tri min:’, minA);
Writeln(‘ gia tri max:’, maxA);
Writeln(‘ gia tri TB:’, TB);
End;
Begin

- Trang 93 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Assign(f, ‘VTA.INP’);
Reset(f);
Readln(f, n);
For i:= 1 to n do
Readln (f, A[i],’ ‘);
MNT( var A: vector; n: byte; var minA, maxA, TB: real);
Close (f);
Readln;
End.
GBước 4: Xây dựng bộ Test:
Nhập vào mảngA gồm các phần tử A =( 3, 4, 3, 5, 9, 7, 9)
Tìm max:
MaxA:= A[1] = 3;minA:= A[1]=3; tong:= A[1]; i:= 1;

i A[i] A[i] > maxA A[ i] < minA maxA MinA tong

2 4 T F 4 3 3+4=7
3 3 F F 4 3 7+3=10
4 5 T F 5 3 10+5=15
5 9 T F 9 3 15+9=24
6 7 F F 9 3 24+7=31
7 9 F F 9 3 31+9=40

Kết quả : maxA= 9; minA= 3; TB= 40/ 7= 5.14


Bài toán mở rộng :
- Yêu cầu nhập vào 2 vector và in ra min, max của mỗi vector và giá trị trung bình của 2
vector đó.
- Tính min, max, trung bình của các giá trị A[i] là chẵn, hoặc lẽ.

- Trang 94 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
PHƯƠNG PHÁP GIẢI BÀI TẬP TIN HỌC
Họ và tên: Phan Thị Bình
Lớp: Tin 4B
Bài 3.18:
Bước 1: Xác định Input, Output
Input: m,n,k
Output: Nếu là cấp số cộng thì gấp đôi giá trị mỗi số
Nếu không thì giảm mỗi số một đơn vị
Bước 2: Ý tưởng giải thuật
Kiểm tra điều kiện k+m=n*2?
Nếu điều kiện đúng thì nhân đôi mỗi số, nếu sai thì giảm mỗi số một đơn vị
Sơ đồ khối:
Begin

Nhập m,n,k

F
m+k=n
*2
T

m:=m*2; m:=m-1;
n:=n*2; n:=n-1;
k:=k*2; k:=k-1;

In m,n,k

End

Bước 3: Chương trình

- Trang 95 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

Var m,n,k:integer;
Begin
Write('Nhap 3 so m,n,k');
Readln(m,n,k);
If m+k=n*2 then
Begin
m:=m*2;
n:=n*2;
k:=k*2;
End
Else
Begin
m:=m-1;
n:=n-1;
k:=k-1;
End;
Write('Gia tri m,n,k sau khi kiem trala:',m:3,n:3,k:3);
Readln;
End.
Bước 4:
Bộ test:
Giá trị m,n,k Kiểm tra Giá trị m,n,k sau khi kiểm tra
3, 6, 9 Là cấp số cộng 6, 12, 18
3, 4, 7 Không phải là cấp số cộng 2, 3, 6

Bài tập tương tự: Nhập vào 3 số a, b, c, kiểm tra xem có phải a, b, c tạo thành cấp số nhân
không? Nếu là cấp số cộng thì thông báo đồng thời gấp đôi mỗi số. Ngược lại thì giảm mỗi
số 2 đơn vị.
Bài 4.20
Bước 1: Xác định Input, Output
Input: Nhập xâu bất kì
Output: Chuẩn hóa xâu
Bước 2: Ý tưởng giải thuật
- Dùng lệnh while s[1]=' ' do delete(s,1,1) để xóa các kí tự trắng đầu xâu
- Dùng lệnh while s[length(s)]=' ' do delete(s,length(s),1) để xóa các kí tự trắng cuối
xâu
- Dùng lệnh while pos(' ',s)<>0 do delete(s,pos(' ',s),1) để xóa những kí tự trắng liền
nhau ở giữa xâu

- Trang 96 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Sơ đồ khối:

Begi
n

Nhập xâu s

s[1]=#3 F
2

T
delete(s,1,1);

s[length(s)]=# F
32

delete(s,length(s),1);

F
Pos(‘
‘,s)<>0
T
delete(s,pos(‘ ‘,s),1;

In xâu s

End

Bước 3: Chương trình

Var s:string;
Begin

- Trang 97 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Writeln('Nhap xau bat ki:');
readln(s);
while s[1]=' ' do
delete(s,1,1);
while s[length(s)]=' ' do
delete(s,length(s),1);
while pos(' ',s)<>0 do
delete(s,pos(' ',s),1);
Writeln('xau sau khi chuan hoa: ',s);
Readln;
End.
Bước 4:
- Bộ test:

Nhập xâu Xâu sau khi chuẩn hóa


Phan Thị Bình Phan Thị Bình
- Xây dựng bài toán tương đương:
Nhập xâu bất kì, đếm số từ có trong xâu ( từ là tập hợp các kí tự kết thúc bằng dấu
cách)

- Trang 98 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Họ và tên: Phan Thị Hoa Lợi
Lớp: Tin 4B
BÀI TẬP
Bài 3.40 Nhập vào bàn phím số nguyên dương N (0<N<2*109). Tính và đưa ra màn hình
tổng bình phương các chử số của N. Ví dụ, với N=125, tổng bình phương các chử số cảu nó
sẽ là 12+22+52=30.
Phân tích bài toán
Bước 1. Tìm hiểu đề bài
- Input: N nguyên dương (0<N<2*109).
- Output: tổng bình phương các chử số của N.
- Tổng bình phương các chử số bằng tổng bình phương của tất cả các chử số có mặt
trong số đó.
Bước 2. Xây dựng ý tưởng giải thật
- Để tính tổng binh phương các chử số thì ta phải lấy ra được các chử số của số đó.
- Cách lấy các chử số trong một số:kết hợp hai toán tử MOD và DIV ta sẽ lần lượt lấy
được từng số dư trong từng hàng đơn vị, chục, trăm, nghìn...
- Bình phương chúng lên rồi cộng dồn vào biến tổng sẽ cho ta kết quả cần tính.
- Sơ đồ khối
Begin

Nhập N

Tong:=0

N>0 In tong End

Du:= N mod 10;


Tong:= tong + sqt(du);
N:= N div 10;

Bước 3. Viết chương trình


Var N:longint;
Tong:interger;
Du:byte;
Begin

- Trang 99 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Repeat
Write (‘ Nhap N= ‘); Readln (N);
If (N≤0) or(N≥2.exp(9*ln(10))) Then write(‘ Nhap lai N ’);
Until (N>0) and (N<2.109)
Tong:=0;
White N>0 do
Begin
Du:= N mod 10;
Tong:=Tong + sqr(du);
N:=N div 10;
End;
Writeln (‘ Tong binh phuong cac so cua ‘,N, ‘ la: ‘, Tong’);
Readln;
End.
 Chú ý:
- Điều kiện ràng buộc đầu vào của N (N>0) and (N<2.109).
- Điều kiện lặp N>0 chứ không phải là N≥0. Vì khi N=0 thì phải dừng lặp, các câu lệnh
dưới không có ý nghĩa nữa.
- Kiểu dữ liệu: N là longint (vì 0<N<2*10 9)., Tong phải là Interger; du là byte (vì du
chỉ nhận giá trị từ 0..9)
Bước 4. Nghiên cứu về lời giải
- Xây dựng bộ text
STT N du Tong

1 125 0 0

2 125 5 25

3 12 2 29

4 1 1 30

5 0

- Mở rộng bài toán: có thể thay vòng lặp While...do bằng vòng lặp Repeat...until.
- Lớp bài toán tương đương
+ Nhập số N nguyên dương và cho biết N có bao nhiêu chử số, tính tổng các chử số
đó?
+ Phân tích số thành tích của các thừa số nguyên tố.
+ Viết hàm Dao_so(N) để cho ra số nghịch đảo của số đó?

Bài 5.13 Hãy lập trình giải bài toán sau: Cho tệp văn bản TAMGIAC.DAT, mỗi dòng của
tệp chứa ba cặp số thực XA, YA, XB, YB, XC, YC, xác định tọa độ các đỉnh tương ứng của tam
giác ABC. Các số trên cùng một dòng cách nhau một dấu cách. Hãy lần lượt đọc các dòng

- Trang 100 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
của tệp, kiểm tra xem tam giac ABC có phải là tam giác cân hay là tam giác đều và đưa ra
màn hình số lượng tam giác can và đều đã đếm được.
Phân tích bài toán
Bước 1. Tìm hiểu đề bài
- Input: TAMGIAC.DAT
- Output:
+ Kiểm tra xem tam giác trên mỗi dòng là cân hay đều.
+ Số lượng tam giac cân hay đều đếm được.
Bước 2.Xây dựng ý tưởng giả thuật
- Đọc tọa độ từng tam giác rồ xử lý
- Tính bình phương độ dài các cạnh a,b,c
- Kiểm tra xem
+ Nếu (a2=b2) or (b2=c2) or (c2=a2) thì tam giác đó cân
+ Nếu (a2+b2= c2) or (b2+c2=a2) or (c2+a2=b2) thì tam giác đó vuông
- Nếu kiểm tra tam giác đó cân thì tăng biến đếm tam giác cân lên một đơn vị.
Nếu tam giác đó vuông thì tăng biến đếm tam giác vuông lên một đơn vị.
- Sơ đồ khối

- Trang 101 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Bước 3. Viết chương trình
Var XA, YA, XB, YB, XC, YC, x, y, z: real;
tg_can, tg_vuong: byte;
fi:text;
Begin
Assign(fi,’TAMGIAC.DAT’);
Reset(fi);
tg_can:=0;
tg_vuong:=0;
While not eof(fi) do
Begin
While not eofln(fi) do read (fi, XA, YA, XB, YB, XC, YC );
x:= sqr(XA- XB) + sqr (YA - YB)
y:= sqr (XB - XC) + sqr (YB - YC)
z:= sqr (XC - XA) + sqr (YC - YA)
If (x=y) or (y=z) or (z=x) then
begin
tg_can:=tg_can + 1;
writeln (‘ Tam giac can’);
end
If (x+y=z) or (y+z=x) or (z+x=y) then
begin
tg_vuong:=tg_vuong + 1;
writeln (‘ Tam giac vuong’);
end;
End;
Bước 4. Nghiên cứu về lời giải
- Xây dựng bộ text
TAMGIAC.DAT
001001
004003
113142
204240
103023

Eof(fi) XA YA XB YB XC YC x y z Loại tg_can tg_vuong


F 0 0 1 0 0 1 √2 1 1 VC 1 1
F 0 0 4 0 0 3 5 3 4 V 1 2
F 1 1 3 1 4 2 √2 √6 2 T 1 2
F 2 0 4 2 4 0 2 2 2√2 CV 2 3
F 1 0 3 0 2 3 √10 √10 2 C 3 3
T

- Trang 102 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

- Lớp bài toán tương đương


+ Tính diện tích các tam giác đọc được và tìm ra tam giac có diện tích lớn nhất, tam giác có
diện tích nhỏ nhất.
+ Một file văn bản có tên DATA.txt lưu trữ số liệu của một mảng n số và có dạng sau:
Dòng đầu tiên của DATA ghi số n.
N dòng tiếp theo của file ghi n số, mỗi số trên một dòng
Viết chường trình nhập số liệu của dãy trên vào một mảng và in ra dữ liệu của mảng trên
sau khi sắp xếp lại theo thứ tự tăng dần.
+ Cho file văn bản ghi số liệu của một bảng số N x M và có dạng như sau:
Dòng đầu tiên ghi hai số N, M cách nhau mởi dấu cách.
N dòng tiếp theo ghi số liệu của N hàng, mỗi dòng bao gồm M số cách nhau bởi dấu cách.
Viết chương trình nhập dữ liệu từ file trên vào mảng số N xM.

- Trang 103 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Họ và tên: Nguyễn Thị Thùy Nhung
Lớp : Tin 4B
Môn : Phương pháp giải bài tập

----------------------------------------------------------------------

CÂU HỎI:
Bài 1:( Bài 3.47)

Cho 4 yếu tố phụ thuộc lẫn nhau của một tam giác đều:
- Độ dài cạnh a
- Bán kính đường tròn nội tiếp r1
- Bán kính đường tròn ngoại tiếp r2
- Diện tích tam giác S
Hãy lập trình:
- Nhập từ bàn phím 4 số thực là giá trị của 4 số thực a, r1, r2, S( theo thứ tự đã nêu,
trong đó chỉ có 1 yếu tố biết trước có giá trị khác 0, còn các yếu tố còn lại chưa biết
trước nhận giá trị khởi tạo là 0).
- Đưa ra màn hình theo thứ tự đã nêu giá trị của tất cả bốn yếu tố theo yếu tố duy nhất
cho trước.
Bài 2:( Bài 6.10 )

Hãy mô tả các hàm MIN2( A,B) trả về giá trị Min{A,B} và hàm MAX2(A, B} trả về giá
trị Max{A, B}( A, B – giá trị thực). Sử dụng các hàm này để mô tả hàm MIN4(A, B, C, D)
và MAX(A, B, C, D) trả về giá trị tương ứng Min{A, B, C, D} và Max{A, B, C, D}( A, B,
C, D – giá trị thực)

BÀI LÀM
Bài 1:

Bước 1:
- Input: Nhập a , r1, r2, S
- Output: Đưan ra màn hình giá trị a, r1, r2, S
Bước 2:
 Ý tưởng:
- Nhập giá trị a, r1, r2, S trong đó:
+ Nếu an <> 0 thì r1 = r2= S =0;
+ Nếu r1 <> 0 thì a = r2 = S = 0;
+ Nếu r2 <> 0 thì an= r1 = S = 0;
+ Nếu S<> 0 thì a = r1 = r2 = 0;
- Dựa vào giá trị đã nhập tính:

- Trang 104 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
+ Nếu a <> 0 tính:
r1=((a*sqrt(3)/6;
r2=2*r1;
S=((sqr(a*sqrt(3))/4;

+ Nếu r1<> 0 thì:


a=((6*r1)/sqrt(3);
r2=2*r1;
S=((sqr(a)*sqrt(3))/4;
Nếu r2 <> 0 thì:
r1=r2/2;
a=((6*r1)/sqrt(3);
S=((sqr(a)*sqrt(3))/4;
+ Nếu S <> 0:
a=sqrt((2*S)/sqrt(3));
r1=((a*sqrt(3)/6;
r2=2*r1;

 Sơ đồ
khối:

- Trang 105 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Bước 3: Chương trình:
Program bai1;
Var an, r1, r2, S;
Begin
Repeat
Write( ‘Nhap an, r1, r2, S:’); Readln(an, r1, r2, S);
Until
((a>0) and (r1=r2=S=0)) or ((r1>0) and (a=r2=S=0)) or((r2>0) and
(a=r1=S=0)) or ((S>0) and (a=r1=r2=0));
If a > 0 then
Begin
r1=((a*sqrt(3)/6;
r2=2*r1;
S=((sqr(a*sqrt(3))/4;
End;
If r1> 0 then
Begin
a=((6*r1)/sqrt(3);
r2=2*r1;
S=((sqr(a)*sqrt(3))/4;
End;
If r2 > 0 then
Begin
r1=r2/2;
a=((6*r1)/sqrt(3);
S=((sqr(a)*sqrt(3))/4;
End;
If S > 0 then
Begin
a=sqrt((2*S)/sqrt(3));
r1=((a*sqrt(3)/6;
r2=2*r1;

End;
Writeln(‘gia tri a, r1,r2,S:’, a, r1, r2, S);
Readln;
End.
Bài 2:
Bước 1:
- Input: a,b,c,d
- Output: Min4{a,b,c,d}và Max4{a,b,c,d};
Bước 2:
 Ý tưởng:
- Xây dựng hàm Min2(a,b):

- Trang 106 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
+ Nếu a>bhì trả về giá trị Min{a,b} là b
+ Ngược lại trả về giá trị a
- Tương tự cho việc xây dựng hàm Max2(a,b)
- Xây dựng hàm MIN4(a, b, c, d)
+ Gọi hàm Min2(a,b) để tính:
MIN4:= Min2(Min2(a,b),Min2(c,d));
- Xây dựng hàm MAX4(a, b, c, d):
+ Gọi hàm Max2(a,b) để tính:
MAX4:=Max2(Min2(a,b),Min2(c,d));
 Sơ đồ khối:

- Trang 107 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

Bước 3: Chương trình:


Pogram bai2;
Var a,b,c,d,m,n : real;

Function MIN2(a,b: real): real;


Begin
If a<b then min2:=a
Else min2:=b;
End;
Function MIN4(a,b,c,d: real): real;
Begin
Min4:=min2(min(a,b),min2(c,d));
End;
Function MAX2(a,b: real): real;
Begin
If a<b then max2:=b
Else max2:=a;

- Trang 108 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
End;
Function MAX4(a,b,c,d: real): real;
Begin
Max4:=max2(max(a,b),max2(c,d));
End;
BEGIN
Write(‘nhap a,b,c,d:’);
Read(a,b,c,d);
n:=min4(a,b,c,d);
m:=max(a,b,c,d);
write( ‘min:’,n,’max:’,m);
readln;
END.

- Trang 109 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Họ tên: Đinh Thuỳ Trang.
Lớp: Tin 4b.

Bài 4.28 / 40 (sách bài tập tin 11)

* Bước 1:
● Input: Nhập chiều dài, rộng, cao của thùng hàng thứ nhất và thứ hai tương ứng là
và .
Nhập chiều dài, rộng, cao của contenơ : .
● Output: Đưa ra dòng thông báo YES hoặc NO.

* Bước 2: Ý tưởng giải thuật.


B 1: Nhập vào chiều dài, rộng, cao của các thùng hàng và contenơ.
B 2: Kiểm tra
Nếu (h1> hc) va (h2> hc) thì qua bước 4.
Nếu sai thì qua bước 3.
B 3: Kiểm tra các khả năng có thể xảy ra
Nếu (( w1+w2<=wc) and (l1<=lc) and (l2<= lc)) hoặc ((w1+l2<=wc) and (l1<=lc)
and (w2<= lc)) hoặc ((l1+w2<=lc) and (w1<=wc) and (l2<=wc)) hoặc ((l1+l2<=lc) and
(w1<=wc) and (w2<=wc)) hoặc ((w1+w2<=lc) and (l1<=wc) and (l2<=wc)) hoặc
( (l2+w1<=lc) and (l1<=wc) and (w2<=wc)) hoặc ((l1+w2<=wc) and (l2<=lc) and
(w1<=lc)) hoặc ((l1+l2<=wc) and (w1<=lc) and (w2<=lc)) thì qua bước 4.
B 4: Thông báo kết quả. Kết thúc.

* Bước 3: Chương trình.


program conteno;
uses crt;
var l1,l2,lc,w1,w2,wc,h1,h2,hc: integer;
Begin
clrscr;
wrirte('nhap vao chieu dai,rong,cao cua thung hang thu nhat:');
readln(l1,w1,h1);
wrirte('nhap vao chieu dai,rong,cao cua thung hang thu hai:');
readln(l2,w2,h2);
wrirte('nhap vao chieu dai,rong,cao cua conteno:');
readln(lc,wc,hc);
if (h1>hc) and (h2>hc) then
writeln('NO')
else
begin
if (w1+w2<=wc) and (l1<=lc) and (l2<= lc) then
writeln(' YES')
else

- Trang 110 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
if (w1+l2<=wc) and (l1<=lc) and (w2<= lc) then
writeln(' YES')
else
if (l1+w2<=lc) and (w1<=wc) and (l2<=wc) then
writeln(' YES')
else
if (l1+l2<=lc) and (w1<=wc) and (w2<=wc) then
writeln(' YES')
else
if (w1+w2<=lc) and (l1<=wc) and (l2<=wc) then
writeln('YES')
else
if (l2+w1<=lc) and (l1<=wc) and (w2<=wc) then
writeln(' YES')
else
if (l1+w2<=wc) and (l2<=lc) and (w1<=lc) then
writeln(' YES')
else
if (l1+l2<=wc) and (w1<=lc) and (w2<=lc) then
writeln('YES')
else
writeln('NO');
readln;
end.

* Bước 4:
■ Xây dựng bộ test:

Thùng 1 Thùng 2 Conteno Kết qủa


2 2 3 3 3 3 3 5 3 YES
5 2 3 4 2 1 5 7 2 NO
3 2 2 3 4 2 5 5 5 YES

■ Mở rộng bài toán:

Bài 7.15/68:

*Bước 1:
●Input: Nhập toạ độ ba đỉnh tam giac A,B, C: (XA,YA), (XB, YB), (XC, YC).
●Output: Kiểm tra ba điểm có phải là ba đỉnh của 1 tam giác vuông hay không
* Bước 2: Ý tưởng giải thuật:
B1: Nhập vào tạo độ ba điểm A,B,C
B2: Tính độ dài các cạnh dựa vào công thức

- Trang 111 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
d:=sqrt(sqr(x-x)+ sqr(y-y))
B3: Kiểm tra sự tồn tại của tam giác vuông bằng định lí Pitago
a2= b2 + c2.
B4: Đưa ra kết quả kiểm tra. Kết thúc.

* Bước 3: Chương trình


Program KTTamGiac;
Uses crt;
Var xA,xB,Xc,yA,yB,yC: integer;
dAB,dAC,dBC: real;
Begin
clrscr;
write('nhap vao toa do dinh A:');
readln(xA,yA);
write('nhap vao toa do dinh B:');
readln(xB,yB);
write('nhap vao toa do dinh C:');
readln(xC,yC);
dAB:=sqrt(sqr(xA-xB)+ sqr(yA-yB));
dAC:=sqrt(sqr(xA-xC)+ sqr(yA-yC));
dBC:=sqrt(sqr(xB-xC)+ sqr(yB-yC));
if (sqr(dAB)=sqr(dAC)+sqr(dBC)) or (sqr(dAC)=sqr(dAB)+sqr(dBC)) or
(sqr(dBC)=sqr(dAC)+sqr(dAB)) then
writeln('A,B,C la ba dinh cua tam giac vuong')
else writeln('A,B,C khong phai la ba dinh cua tam giac vuong');
readln;
End.

* Bước 4:

■ Có thể làm bài trên bằng cách sử dụng kiểu bản ghi để mô tả các đối tượng diem,
tamgiac trong đó có sử dung thủ tục để kiểm tra điều kiện của tam giác.
Program KTTamGiac;
uses crt;
type
diem=record
x,y:integer;
end;
tamgiac=record
A,B,C:diem;
end;
var T: tamgiac;
vuong:boolean;
procedure hienthi(var R:tamgiac);

- Trang 112 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
begin
writeln(' toa do ba dinh cua tam giac la:');
writeln(' dinh A(',R.A.x:3,', ', R.A.y:3,')');
writeln(' dinh A(',R.B.x:3,', ', R.B.y:3,')');
writeln(' dinh C(',R.C.x:3,', ', R.C.y:3,')');
end;
procedure KTTG(var R:tamgiac;var vuong:boolean);
var a,b,c:real;
begin
vuong:=false;
if (a*a+b*b=c*c) or (a*a+c*c=b*b) or (b*b+c*c=a*a) then
vuong:= true;
end;
Begin
Clrscr;
write('nhap toa do dinh A:'); readln(T.A.x, T.A.y);
write('nhap toa do dinh B:'); readln(T.B.x, T.B.y);
write('nhap toa do dinh A:'); readln(T.C.x, T.C.y);
hienthi(T);
KTTG(T,vuong);
writeln('tam giac co tinh chat:');
if vuong then writeln(' la tam giac vuong');
readln;
End.

■ Xây dựng bộ test:

A B C KẾT QUẢ
(7, 1) (2, 3) (4, 5) Không phải tam giác vuông
(2, 3) (1, 2) (4, 5) Không phải tam giác vuông
(0, 0) (0, 4) (5, 0) Là tam giác vuông
(1, 4) (3, 1) (6, 3) Là tam giác vuông

■ Mở rộng bài toán: Có thể làm bài như sau


Nhập vào toạ độ ba đỉnh của tam giác và khảo sát các tính chất của tam giác.

- Trang 113 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Họ và tên: Trần Lê Phước Thọ
Lớp: Tin 4B.

BÀI TẬP
PHƯƠNG PHÁP GIẢI BÀI TẬP TIN HỌC

Bài 4.24(SGK - TIN HỌC 11): Xét N hình cầu( 1<=N<=30). Hình cầu thứ i có tọa độ tâm ở
điểm (xi, yi, zi) và bán kính Ri. Các tọa độ và bán kính nhận giá trị thực. Áp dụng phương
pháp Nổi bọt sắp xếp các hình cầu theo thứ tự tăng dần của bán kính để có được một dãy
hình cầu từ nhỏ đến lớn.
Bước 1: Tìm hiểu đề bài:
 Input: N, xi, yi, zi và bán kính Ri.
 Output: N dòng, mỗi dòng chứa 4 giá trị xi, yi, zi, Ri và tăng dần của Ri.
Bước 2: Xây dựng ý tưởng giải thuật:
 Sử dụng mảng để lưu N quả cầu.
 Sử dụng kiểu bản ghi để lưu các giá trị xi, yi, zi, Ri của mỗi quả cầu.
 Thực hiện (N - 1) lượt với i chạy từ 1 đến N - 1.
 Tại quả cầu thứ i: Nếu gặp quả cầu đứng trước có bán kính lớn hơn bán kính của
quả cầu đứng sau thì hoán đổi vị trí cho nhau.

- Trang 114 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

BEGIN

Nhập dữ
liệu

KT: = True

F
KT

i =1 T
In kết quả

i<=
N-1

F Ri >
Ri+1

Tg := Ri
Ri := Ri+1
Ri := Tg
KT: = False

Bước 3: Chương trình:


Type QUACAU = RECORD
x, y, z, R : real;
end;

- Trang 115 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Var A: Array[ 1..N] of QUACAU;
N, i, k : integer;
xi, yi, zi, Ri : Real;
BEGIN
Write(‘ nhập so luong qua cau N = ‘);
Readln (N);
For i := 1 to N do
Begin
Write(‘ nhap toa do tam cua moi qua cau’);
Readln(A[i].x, A[i].y, A[i].z);
End;
KT := True;
While KT do
For i:= 1 to N - 1 do
Begin
If (Ri > Ri+1) then
Begin
Tg := Ri;
Ri := Ri+1;
Ri := Tg;
End;
KT := False;
End;
Writeln(‘ kết quả sắp xếp là:’)
For k := 1 to N do
Write (A[ xi], yi, zi, Ri]);
END.
Bước 4: Mở rộng bài toán:
Bài toán này có thể sử dụng các phương pháp sắp xếp khác như: sắp xếp lựa chọn, phân
đoạn, đổi chỗ...

Bài 6.22: Cho bảng vuông C kích thước n * n (1<= n <= 30) có giá trị nguyên. Hãy lập
trình:
 Đọc dữ liệu từ tệp văn bản HV.INP
 Dòng đầu tiên chứa số nguyên n;
 N dòng tiếp theo: mỗi dòng chứa n số nguyên mô tả các giá trị của bảng C, các số
cách nhau ít nhất một dấu cách.
 Đưa ra tệp văn bản HV.OUT bảng C đã chuyển vị với cách tổ chức thông tin như ở
bảng dữ liệu HV.INP

- Trang 116 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Bước 1: Tìm hiểu đề bài
Input : Tệp văn bản HV.INP
Output : Tệp văn bản HV.OUT
Bước 2: Xây dựng ý tưởng giải thuật
 Dùng mảng hai chiều (ma trận vuông C) để lưu dữ liệu được đọc từ tệp văn bản
HV.INP.
 Sử dụng thủ tục SWAPV(x, y) để chuyển vị ma trận C để đổi chỗ các phần tử của
hàng i thành cột j.
 Sử dụng các thủ tục để đọc dữ liệu từ ma trận đã chuyển vị và lưu vào văn bản
HV.OUT.
 Sau khi viết xong thủ tục thì viết chương trình chính gọi các thủ tục trên.
 Các bước giải thuật:
B1: Duyệt file cho đến khi kết thúc file thì đọc dữ liệu từ file văn bản HV.INP.
B2: Lưu dữ liệu vừa đọc vào mảng C. Quay lại B1.
B2: Duyệt mảng C với hai biến i, j.
B3: Sử dụng thủ tục SWAPV( x, y) để chỗ các phần tử của hàng và cột cho nhau trong
mảng C ta được mảng C1 sau khi chuyển vị. Quay lại B2.
B4: Mở file HV.OUT. Duyệt mảng C1 để ghi dữ liệu file văn bản HV.OUT. Quay lại B3.
B5: In file văn bản HV.OUT. Kết thúc.
Bước 3: Chương trình.
Procedure Nhap;
Var f: text;
C : array[1..100, 1..100] of integer;
i, j, x : integer;
Begin
Begin
Assign(f, ‘HV.INP’);
{$I-}
Reaset(f);
{$I+}
If (IOResult <> 0) then
Begin
writeln(‘File khong ton tai’);
halt;
End;
Writeln(‘Noi dung cua file ‘, HV.INP)
While not Eof(f) do
For i := 1 to n do
For j := 1 to n do
Begin
readln(f, x);
C[i,j] := x;
End;
Close(f);

- Trang 117 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Readln;
End;
End.
Procedure SWAPV( x, y);
Var x, y, i, j, K: integer;
Begin
For i:= 1 to n do
For j:= 1 to n do
Begin
K:= C[i, j];
C[i, j]: = C[j, i];
C[j, i]:= K;
End;
End;

Procedure Indulieu;
Var
Begin
Assign(f,’HV.OUT’);
Rewrite(f);
Writeln(f, n);
For i:= 1 to n do
For j:= 1 to n do
Begin
write(f ,C[i, j]: 0:2, #32);
writeln(f);
End;
Close(f);
End.
BEGIN
Nhap;
SWAPV( x, y);
Indulieu;
END.
Bước 4:
Khi sử dụng các thủ tục nên thực hiện việc đọc từ file văn bản sau đó chuyển vị và
cuối cùng in dữ liệu ra màn hình.
Trong bài toán này có thể sử dụng hàm thay thế cho thủ tục, sau đó gọi hàm để lấy
giá trị trả về.

- Trang 118 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Họ tên: Trần Ngọc Nam
Lớp: Tin4B
Bài tập 3.43
- Bước 1: Input: P(x,y), Q(u,v)
Output: Kiểm tra P và Q có thuộc cùng 1 góc phần tư hay không?
- Bước 2:
+ Bước 1:
- Nhập tọa độ của Pvà Q
+ Bước 2:
- Nếu (x>=0 and y>=0 and v>=0 and u>=0) or (x<=0 and y>=0 and v<=0 and
u>=0 ) or(x<=0 and y<=0 and v<=0 and u<=0 ) or(x>=0 and y<=0 and v>=0 and u<=0 )
then
- P và Q cùng thuộc một góc phần tư và sang bước 3
+ Bước 3:
- Kết thúc.
- Bước 3: Giải thuật
Var x, y, v, u : real;
Begin
Write(‘ nhập tọa độ của P ‘); Readln(x,y);
Write(‘ nhập tọa độ của Q ‘); Readln(v,u);
Begin
If ((x>=0) and (y>=0)and (v>=0) and (u>=0)) or
((x<=0) and (y>=0) and (v<=0) and (u>=0 )) or
((x<=0) and (y<=0) and (v<=0) and (u<=0 )) or
((x>=0) and (y<=0) and (v>=0) and (u<=0 )) then
Writeln(‘ P và Q thuộc góc phần tư s ‘)
Else
Writeln(‘ P và Q không thuộc góc phần tư ‘);
End;
Readln;
End .
- Bước 4: Bài toán tương tự
Nhập từ bàn phím hai điểm P(x,y) và Q(u,v) kiểm tra xem P và Q có đối xứng trên
trục tọa độ Đề- Các với nhau hay không . Đối xứng qua ox hoặc oy hoặc gốc tọa độ.

Bài tập 5.16:


- Bước 1: Input: Nhập dãy số
Output: + Đọc file subseq.inp
Dòng đầu tiên chứa hai số nguyên N,K.
Các dòng sau các số nguyên cách nhau ít nhất một dấu cách.
+ Max các phần tử liên tiếp cùng nhau chia hết cho K
- Bước 2: Ý tưởng
+ Bước 1: Nhập dãy N số nguyên A1..An .
+ Bước 2: Nếu N<1 and N>10000 quay lại Bước1

- Trang 119 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
+ Bước 3: Readln(f,n,k)
+ Bước 4 : change:=false; s:=0; max:=0;
+ Bước 5: for i:=1 to n do
+ Bước 6: Read(f,a)
- Nếu a mod k =0 thì
+ Nếu change thì s:=s+1
+ Ngược lại change := true
s:=1
- Ngược lại qua Bước 7
+ Bước 7: Nếu change thì
Change:=false
Nếu s>max thì max:=s
+ Bước 8: Writeln(f, max)
+ Bước 9: Kết thúc
- Bước 3: Giải thuật
Var f: text;
I, a, n, k, s, max : integer ;
Change: boolean;
Begin
Assign(f,’subseq.inp’);
Reset(f);
Readln(f,n,k);
Change:=false;
S:=0;
Max:=0;
For i:=0 to n do
Begin
Read (f,a);
If a mod k=0 then
If change then s:=s+1
Else
Begin
Change:= true;
S:=1;
End
Else
If change then
Begin
Change:=false;
If s>max then max:=s;
S:=0;
End;
End;
Close(f);

- Trang 120 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Assign(f,’subseq.out’);
Rewrite(f);
Writeln(f,max);
Close(f);
End.

- Trang 121 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Họ Và Tên: Trần Thị Nga
Lớp : Tin 4B
PHƯƠNG PHÁP GIẢI BÀI TẬP TIN HỌC
I.PHƯƠNG PHÁP CHUNG TIẾP CÂN GIẢI BÀI TẬP

BÀI TẬP 3.44: Cho tam giác ABC có tọa độ đỉnh A là (xa,xb), tọa độ đỉnh B(xb,0) và tọa
độ đỉnh C là( xc,0), xb <> xc .Các tọa độ nhận giá trị thực. Hãy tìm tọa độ xd sao cho điểm
D có tọa độ ( xd, ya) tạo thành một tam giác BDC cân, DB=DC. Hãy lập trình:
- Nhập vào từ bàn phím các giá trị xa,ya,xb,xc.
- Đưa ra màn hình tọa độ điểm D với 3 chữ số sau dấu chấm thập phân
BƯỚC 1:
Xác định: Input: nhập tọa độ xa,ya,xb,xc
Output: In ra xd,yd
BƯỚC 2;
Ý tưởng
B1-Nhập tọa độ xa,ya,xb,yb
B2 -Kiểm tra nếu
+ xc=xb thì nhập lại
+ xc<>xb thì chuyển sang B3
B3: Gán xd:=(xb+xc)/2;
yd:=ya;
B4: In ra xd,yd
BƯỚC 3: Vẽ sơ đồ khối

BƯỚC 3: VIẾT CHƯƠNG TRÌNH

- Trang 122 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Program baitap344;
Var xa,ya,xb,xc: real;
Xd,yd: real;
Begin
Repeat
Write(‘nhap toa do diem A);
Readln(xa,ya)
Write(‘nhap toa do diem B’);
Readln(xb.yb);
Write(‘nhap toa do diem C’);
Readln( xc,yc);
Until (xb<>xc);
Xd:=(xb+xc)/2;
Yd:=ya;
Writeln(‘toa do diem A’,xd:5,yd:5);
End.

BÀI 6.7: Đường thẳng ax+by+c= 0 chia mặt phẳng thành hai nửa âm và dương. Hãy xây
dựng hàm funtion vitri( a,b,c,u,v: real) : integer; trả về giá trị:
-1 nếu u,v nằm ở nửa mặt phẳng âm
1 nếu u, v nằm ở nửa mặt phẳng dương
0 nếu u,v nằm trên đường thẳng
Hãy lập trình:
- Nhập vào từ bàn phím các hệ số a,b,c của đường thẳng ax+by+c=0 và tọa độ của các
điểm A,B,C
- Sử dụng hàm nói trên để kiểm tra xem tam giác ABC có nằm gọn trong một mặt
phẳng nào đó hay không. Kết quả kiểm tra đưa ra màn hình dưới dạng thông báo
‘ABC nằm trong nửa mặt phẳng âm ,hoặc ABC nằm trong nửa mặt phẳng dương, hay
ABC không nằm trong nửa mặt phẳng nào cả
BƯỚC 1:
Xác định : Input: Nhập hê số a,b,c.
Nhập toa độ xa,xb,xc,ya.yb.yc
Output :In ra màn hình
+Tam giác ABC nằm trong mặt phẳng dương
hoặc Tam giác ABC nằm trong mặt phẳng âm hoặc
tam giác ABC không nằm trong mặt phẳng nào cả
BƯỚC 2: ý tưởng giả thuật
B1: Nhập các hệ số a,b,c của đường thẳng ax+by+c=0;
Xây dựng hàm kiểm tra một điểm có thuộc nửa mặt phẳng
Sử dụng hàm kiểm tra vị tric cho 3 điểm A,B,C
Nếu vị trí 3 điểm nhận giá trị
+ 1 thì tam giác nằm trong mặt phẳng dương
+ -1 thì tam giác nằm trong mặt phẳng âm
Ngược lại thì không nằm trong mặt phẳng nào

- Trang 123 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
BƯỚC 3: SƠ ĐỒ KHỐI

Nhập a,b,c
Xa,xb,xc,ya,yb,yc

P:=vitri(a,b,c,xa,ya)
q:=vitri(a,b,c,xa,ya)
r:=vitri(a,b,c,xa,ya)

(Q=1) In ra màn hình tam giác


and(p=1) ABC nằm trong mặt phẳng
and(r=1) T dương

(Q=-1)
and(p=- In ra màn hình tam giác
1) ABC nằm trong mặt phẳng
and(r=- âm
1) T

In ra tam giác ABC


không nằm trong mặt
phẳng nào

BƯỚC 4 : VIẾT CHƯƠNG TRÌNH


Program baitap6.7;
Var a,b,c,xa,xb,xc,xd,ya,yb,yc,yd: real;

- Trang 124 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Q,r,p: integerl
Function vitri(a,b,c ,u,v: real): integer;
Var vt: integer;
Begin
If(a*u+b*v+c)>0 then vt:=1
Else if (a*u+b*v+c)<0 then vt:=-1
Else vt:=0;
Vt:=vitri;
End.
Begin
Write(‘nhap he so a,b,c’);
Readln(a,b,c);
Write(‘nhap toa do diem A’);
Readln(xa,ya);
Write(‘nhap toa do diem B’);
Readln(xb,yb);

Write(‘nhap toa do diem C’);


Readln(xc,yc);
Q:=vitri(a,b,c,xa,ya);
P:=vitri(a,b,c,xb,yb);
R:=vitri(a,b,c,xc,yc);
If (Q=1)and(P=1)and(R=1) then writeln(‘tam giac ABC nam trong mat phang duong’);
Else
If (Q=-1)and(P=-1)and(R=-1) then writeln(‘tam giac ABC nam trong mat phang am’)
Else writeln(‘tam giac ABC khong nam trong mat phang nao’)
End.

- Trang 125 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
PHƯƠNG PHÁP GIẢI BÀI TẬP TIN HỌC

Họ tên: Võ Văn Phượng.


Lớp: Tin 4B.

Bài 4.10 Cho hai dãy số nguyên A = (a1, a2, …, an) và B = (b1, b2, …, bn). Dãy C = (c1, c2,
…, c2n) được xác định như sau:
ak với i = 2k -1, k = 1, …, n.
ci =
bk với i = 2k, k = 1, …, n.
Hãy lập trình:
a, Nhập từ bàn phím số nguyên N (2 ≤ N ≤ 20), dãy số nguyên A, B;
b, Tạo và đưa ra màn hình dãy C.
Giải:
Bước 1: Input: Dãy số A, B, N.
Output: Dãy C.
Bước 2: Ý tưởng
B1: Nhập N;
B2: Nếu N thuộc [2..20] thì nhập A, B
ngược lại thì quay lại B1;
B3: Cho k chạy từ 1 tới n thực hiện
c[2*k – 1]:= a[k];
c[2*k]:= [b];
B4: In dãy C và kết thúc.
Bước 3: Chương trình
Const N = 40;
Type Songuyen = array [1 .. N] of integer;
Var A,B,C : Songuyen;
n, i, k : integer;
Begin
Repeat
Writeln(‘ nhập số n:’); readln(n);
Until (2 <= n) and (n <= 20);
For k:= 1 to n do
begin
Writeln(‘nhập a[‘,i,’] ‘:); readln(a[k]);
Writeln(‘nhập b[‘,i,’]’:); readln(b[k]);
end;
For k:= 1 to n do
begin
c[2*k-1]:= a[k];
c[2*k]:= b[k];
end;
Readln;

- Trang 126 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
End.
Bước 4: Test
k 1 2 3
A[k] 6 8 7
i:= 2k-1 1 3 5
C[i] 6 13 8 9 7 20
i:= 2k 2 4 6
B[k] 13 9 20

Bài 6.14 Cho khai báo kiểu dữ liệu:


TYPE Vector = ARRAY[ 0 .. 50] OF REAL;
Biến A thuộc kiểu Vector, A = (a0, a1, …, an). Hãy mô tả hàm POLY(a,n,x) trả về giá trị anxn
+ an-1xn-1 +… + a1x + a0, n nhận giá trị nguyên kiểu byte, x nhận giá trị thực.
Lập trình nhập từ bàn phím số nguyên n (0 < n ≤ 50), các số thực an , an-1 , …, a1, a0, x. Sử
dụng hàm POLY nói trên tính và đưa ra màn hình giá trị P(x) = anxn + an-1xn-1 +… + a1x + a0
với kết quả lấy đến ba chữ số thập phân.
Giải:
Bước 1:
Input: nhập n, x,a[i] i = 1, …,n;
Output: P(x).
Bước 2: Ý tưởng:
B1: Nhập n;
B2: Nếu n thuộc [0 .. 50] thì nhập an , an-1 , …, a1, a0, x
ngược lại thì quay lại B1;
B3: Xậy dựng POLY;
B4: Gọi hàm POLY, px := POLY(a,n,x);
B5: In giá trị px và kết thúc.
Bước 3: Chương trình:
Type vector = array[ 0..50 ] of real;
Var b : vector; px, x : real; i : byte;
Function POLY ( var a : vector; n : byte; x : real) : real;
Var i : byte; t : real;
begin
t := 0;
for i := n downto 0 do t := t + a[n]*exp(n*ln(x));
POLY := t;
end;
Begin
Repeat
Writeln(‘nhập số n:’); readln(n);
Until ( 0 <= n ) and (n <= 50 );
Writeln(‘nhập x’);readln(x);
For i := 0 to n do
Begin

- Trang 127 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Writeln(‘nhập a[‘,i,’]’);readln(a[i]);
End;
Px := POLY (a, n, x);
Writeln(‘ giá trị px:’,px);
Readln;
End.

- Trang 128 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

Họ và tên: Lê Thị Kiều Nhi


Lớp : Tin 4B

Bài 3.46
Một hình tròn có các yếu tố:
- Bán kính R
- Đường kính D
- Chu vi L
- Diện tích S
Hãy lập trình:
- Nhập vào bàn phím 4 số thực là giá trị của R, D, L, S ( Theo đúng thứ tự đã nêu,
trong đó chỉ có 1 yếu tố biết trước có giá trị khác 0, các yếu tố còn lại chưa biết trước
nhận giá trị khởi tạo là 0.
- Đưa ra màn hình theo thứ tự đã nêu giá trị đầy đủ các yếu tố theo yếu tố duy nhất đã
cho, kết quả đưa ra với 2 chữ số sau dấu chấm thập phân.
Bước 1:
- Input: 1 trong 4 yếu tố: R, D, L, S
- Output: Tìm 3 yếu tố còn lại
Bước 2:
Ý tưởng
- Sau khi chọn yếu tố cần nhập, ta sẽ nhập giá trị cho yếu tố đó và các yếu tố còn lại sẽ
được gàn giá trị bằng 0.
- Từ các công thức liên hệ giữa các yếu tố đó, ta tính được 3 yếu tố còn lại thông qua 1
yếu tố đã cho:
+ Biết R: D=2xR; L=2xRx3,14; S=3,14xR2;
+ Biết D: R= D:2; L=Dx3,14; S=(D:2)xD2;
+ Biết L: R=L:(2x3,14); D=L:3,14; S=Lx3,14:2;
+ Biết S: R=S:3,142; D=2xS:3,142; L=2xSx3,14;
Thuật toán:

- Trang 129 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

Begin

Nhập yếu tố cần


biết trước X

Đ
X<>R & X<>D &
X<>L & X<> S

Nhập giá trị K cho yếu tố X

Đ R:=K; D=L=C=0;
X=R In ra: K; 2*K; 2*pi*K; pi*pi*K

X=D Đ D:=K; R=L=C=0;


In ra: K/2; K; pi*K; pi*pi*K/2;
S

Đ L:=K; R=D=C=0;
X=L In ra: K/(2*pi); K)/pi; K; pi*K/2;

Đ S:=K; R=D=L=0;
X=S In ra: K/(pi*pi); (2x K)/(pi*pi);
2k*pi; K;
S

End

- Trang 130 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Bước 3: Chương trình:

Program Bai_3.46;
use crt;
var X: char;
k: real;
Begin
writeln(' Cac yeu to duoc quy dinh tuong ung:');
writeln(' R- Ban kinh; D- Duong kinh; L- Chu vi; S- Dien
tich');
writeln(' Ban chon gia tri can nhap la (R/D/L/S)?');
X:='';
while (X<>'R') and (X<>'D') and (X<>'L') and (X<>'S') do
Begin
Writeln(' Chon yeu to can nhap'); read(X);
End;
writeln(' nhap gia tri cho yeu to do: ');read(k);
If X='R' then
Begin
writeln(k:8:2, 0:8, 0:8, 0:8);
writeln(k:8:2, 2*k:8:2, 2*pi*k:8:2, pi*pi*k:8:2);
end;
If X='D' then
Begin
writeln(0:8, k:8:2, 0:8, 0:8);
writeln(k/2:8:2, k:8:2, pi*k:8:2, pi*pi*k/2:8:2);
end;
If X='R' then
Begin
writeln(0:8, 0:8, k:8:2, 0:8);
writeln(k/(2*pi):8:2, k/pi:8:2, k:8:2, pi*k/2:8:2);
end;
If X='R' then
Begin
writeln(0:8, 0:8, 0:8, k:2:8);
writeln(k/(pi*pi):8:2, 2*k/(pi*pi):8:2, 2*k/pi:8:2,
k:8:2);
end;
readln
end;

- Trang 131 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

Bước 4:
- Bộ test

Nhập vào: Kết quả:


R D L S
5 10 31.42 78.54
2.50 5 15.71 19.63
0.80 1.60 5 7.86
0.51 1.01 3.18 5

- Mở rộng bài toán:


Nhập 1 trong 4 yếu tố của 1 tam giác đều: Cạnh, bán kính đường tròn nội tiếp, bán kính
đường tròn ngoại tiếp, diện tích tam giác. Tính 3 yếu tố còn lại thông qua 1 yếu tố đã biết
trước.

Bài 6.9
Trong Pascal cung cấp hàm Upcase(c) trả về kết quả là chữ cái in hoa nếu c là chữ cái in
thường và giữ nguyên c trong trường hợp ngược lại. Hãy bổ sung thêm khả năng xử lí kí tự
của Pascal bằng cách thêm Lower(c) trả về kết quả là chữ cái in thường nếu c là chữ cái in
hoa và giữ nguyên trong trường hợp ngược lại.
Hãy lập trình:
- Nhập từ bàn phím xâu S
- Viết chương trình dùng hàm Lower(c) để thay tất cả các chữ cái hoa nếu có trong xâu
S thành chữ thường và đưa kết quả biến đổi ra màn hình.
Bước 1:
Input: Xâu S.
Output: Xâu S sau khi biến đổi tất cả chữ cái in thường thành in hoa.
Bước 2:
Hệ thống kiến thức liên quan: Mã Ascii của ‘a’ là 97, của ‘A’ là 65. Để lấy được giá trị mã
Ascii của 1 kí tự c ta dùng hàm ord(c) và để kí tự có mã Ascii là c ta dùng hàm chr(c).
Ý tưởng

- Trang 132 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
- Xây dựng hàm Lower(c) theo yêu cầu bài toán:
+ Nếu c thuộc ‘A’..’Z’ thì gán lại c= chr(ord(c)+ 32);
+ Nếu c không thuộc ‘A’..’Z’ thì giữ nguyên c;
- Duyệt trong xâu S, với mỗi kí tự trong S gọi hàm Lower(c) để biến đổi kí tự đó thành
in thường.
Thuật toán:
- Chương trình con: So sánh c với ‘A’ và ‘Z’
+ Nếu c>=’A’ và c<=’Z’ thì Lower= chr (ord (c) +32)
+ Ngược lại thì Lower= c.

- Chương trình chính:

Begin

Nhập xâu S;
i:=1;

Đ
i<=length(S) End

S[1]= Lower(S[i];
i:=i+1;

Bước 3: Chương trình:

- Trang 133 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Program Bai_6.9;
uses crt;
var i: integer;
S:string;
Function Lower(c: char): char;
Begin
if (c>='A') and (c<='Z') then Lower:=chr(ord(c)+32)
else Lower:=c;
end;
BEGIN
clrscr;
writeln(' Nhap vao xau S:'); readln(S);
for i:=1 to length(S) do
S[i]:= Lower(S[i]);
writeln(' Xau S sau khi bien doi la:',S);
readln
END.

Bước 4:
- Mở rộng bài toán: Áp dụng các hàm như Lower(c), Upcase(c), Ord(ch), Chr(n)… để thực
hiện giải mã một xâu.

- Trang 134 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

PHƯƠNG PHÁP GIẢI BÀI TẬP TIN HỌC PHỔ THÔNG


Họ và tên: Hoàng Văn Hiền
Lớp: Tin 4B
Bài: 3.28 (Sách bài tập lớp11)
Bước 1:
 Input: k, r, p
 Output: Thông báo bầu lại nếu có hai người có số phiếu cao nhất bằng nhau hoặc cả ba
người có số phiếu bằng nhau.
Bước 2:
 Ý tưởng giải thuật:
- Kiểm tra điều kiện
- So sánh số phiếu của 2 trong 3 bạn, gán số lớn hơn cho biến Max. Sau đó so sánh
biến Max đó với số phiếu của bạn còn lại.

 Sơ đồ khối: Begin

Nhập k,r,p

T (k=r>p)or(r=p>k)
or(p=k>r)or(a=b=
c)
F

k>r F

T
Thong bao
bau lai Max:=k; Max:=r;

p>ma
x

Max:=p;

Thong bao nguoi- Trang 135 -


trung cu (max)
End
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

Bước 3: Cài đặt giải thuật:


Program BauCanBoLop(k,r,p);
Var Max, k,r,p: Integer;
Begin
Writeln('Nhap so phieu cua 3 nguoi lan luot la k,r,p:'); Readln(k,r,p);
If ((k=r)and(k>p)) or ((r=p)and(r>k)) or ((k=p)and(k>r)) or ((k=r)and(r=p))
Then
Writeln('Bau Lai!')
Else
Begin
If (k>r)Then max:=k
Else max:=r;
If p> max Then
max:=p;
write('Nguoi trung cu co so phieu la',max);
End;
Readln;
End.

 Bước 4:
 Xây dựng bộ test:

K R P Thông báo
20 30 15 R trúng cử
5 30 30 Bầu lại
10 10 10 Bầu lại
 Xây dựng lớp bài toán tương tự:
Hãy kiểm tra ba cạnh nhập từ bàn phím có phải là ba cạnh của một tam giác không.
Đưa ra thông báo và độ dài cạnh dài nhất.
Bài 4.48: (Sách bài tập lớp 11) (Lý thuyết).

- Trang 136 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

Học tên :Lê Thị Thuỷ


Lớp :Tin 4B
Môn :Phương pháp giải bài tập Tin học .

Bài 4.27:
Để giữ bí mật người ta phải mã hoá các thông tinh trước khi truyền đi hoặc lưu trữ. Một trong
nhưng cách mã hoá sơ sớm nhất được sử dụng rộng rãi thời cổ đại là cách mã hoá do Xê Da đề xuất:
trong thông điệp, người ta thay đổi chữ cái bằng chữ cái đứng sau nó K vị trí trong bảng chữ cái.
Việc tim kiếm và thay thế được tiến hành vòng tròn theo bảng chữ cái. Nếu bảng chữ cái có N chữ,
thì sau chữ cái thứ N-1 là chữ cái thứ nhất,… Cách mã hoá này gọi là mã Xê Da. Các kí tự ngoài
bảng chữ cái vẫn được giữ nguyên.
Ví dụ, bảng chữ cái tiếng Anh có 26 chữ cái. Nếu K=2 thì có nghĩa là a được thay bằng c, b được
thay bằng d,…y được thay bằng a, z được thay bằng b. Các chữ cái in hoa sẽ được thay thế bằng chữ
cái in hoa tương ứng. Trong trường hợp này, từ ‘TIN HOC’ sẽ được mã hoá thành ‘VKP JQE’. Hãy
lập trình:
Nhập vào từ bàn phím số nguyên K (1<K<=26) và xâu S không quá 255 kí tự.
Mã hoá theo quy tắc mã Xê Da và đưa kết quả ra màn hình

Bài làm:

Bước 1:
 Input: Số nguyên K (1<K<=26), xâu S (length(S)<=255).
 Ouput: Xâu S được mã hoá theo nguyên tắc Xê Da.
 Nguyên tắc Xê Da là: Thay đổi chữ cái bằng chữ cái đứng sau nó K vị trí trong bảng chữ
cái. Việc tim kiếm và thay thế được tiến hành vòng tròn theo bảng chữ cái. Nếu bảng chữ
cái có N chữ, thì sau chữ cái thứ N-1 là chữ cái thứ nhất,… Cách mã hoá này gọi là mã
Xê Da. Các kí tự ngoài bảng chữ cái vẫn được giữ nguyên.

Bước 2:

 Nhập vào xâu S (Length(s)<=255).


 Duyệt từng hết độ dài xâu S, mỗi chữ cái đưa ra ví trí của nó trong bảng mã ASCII và tăng
thêm K đơn vị .

- Trang 137 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
 In ra xâu sau khi vị trí của từng chữ cái trong xâu được tăng lên K đơn vị.
 Sơ đồ giải thuật:

Nhập xâu S, số
nguyên K

i:=1;

S :=char (ord(S )
+k);
i:=i+1;
T

i>length(S
);

In S

Bước 3:
{..............Ma hoa Xe Da....................}
Program Ma_hoa_xau;
Var i,k: Integer;
S:tring[255];
Begin
Write(‘Nhap vao mot xau S<=255 :’);Readln(S);
Write(‘Nhap vao k :’);Readln(k);
For i:=1 To length(S) Then
S :=chr(ord(s[i])+k);
For i:=1 To length(S) Do
Write(‘Xau sau khi da duoc ma hoa la :’,S[i]);
Readln;
End.
Bước 4:
+Test:
Nhập vào S=’TIN HOC’ i=1 S[1]:=’V’
Nhập k=2 i=2 S[2]:=’K’
i:=3 S[3]:=’P’

- Trang 138 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
i:=4 S[4]:=’’
i:=5 S[5]:=’J’
i:=6 S[6]:=’Q’
i:=7 S[7]:=’E’
In ra S=’VKP JQE
+Các bài toán tương tự:
Bài 1:Nhập vào xâu S (độ dài xâu<255). Sau đó kiểm tra, nếu các kí tự trong xâu S là số thì giữ
nguyên,nếu chứa chữ cái thì mã hoá theo quy tắc Xê Da.Quy tắc Xê Da như sau : : trong thông điệp,
người ta thay đổi chữ cái bằng chữ cái đứng sau nó K vị trí trong bảng chữ cái. Việc tim kiếm và
thay thế được tiến hành vòng tròn theo bảng chữ cái. Nếu bảng chữ cái có N chữ, thì sau chữ cái thứ
N-1 là chữ cái thứ nhất,… Cách mã hoá này gọi là mã Xê Da. Các kí tự ngoài bảng chữ cái vẫn được
giữ nguyên.
Bài 2: Nhập vào một xâu S(độ dài của xâu<=255).Kiểm tra các kí tự trong xâu là số nguyên thi
giữ nguyên, nếu là chữ cái thì tự động thay chữ cái đoa bằng chữ cái đứng liền sau nó,
Ví dụ: TIN 4b  UJO 4C

Bài 7.14:Cho số nguyên N ở hệ 10 dưới dạng xâu không quá 50 chữ số và không có số 0 không
có nghĩa ở đầu. Số thống kê của N được xây dựng như sau :
 Tính tần số xuất hiện các chữ số của N;
 Viết liên tiếp tần số và chữ số theo thứ tự tăng dần của các chữ số khác nhau trong N
Ví dụ :Với N=353, ta có tần số xuất hiện của 3 là 2, tần số xuất hiện của 5 là 1. Như vậy số
thống kê sẽ là 2315.
a) Xác định các kiểu dữ liệu cần sử dụng;
b)Viết đoạn chương trình tính số thống kê tương ứng.

Bài làm
Bước 1:
Input: Xâu số N (Xâu không quá 50 chữ số và không có số 0 không có nghĩa ở đầu),
Ouput: Xác định kiểu dữ liệu.
Xây dựng thống kê của N.
Bước 2:
Nhập vào xâu N.
Sử dụng hàm thống kê số lần xuất hiện của các số trong xâu N
Duyệt toàn bộ xâu so sánh N[i] với các chữ số từ ‘0’ đến ‘9’
Nếu bằng thì tăng đếm lên.
In ra tần số xuất hiện và chữ số đó.
Bước 3:
a) Kiểu dữ liệu cần sử dụng :
*Chương trình chính:
N,Tk:String[50]
i: Char
j:Byte
*Đoạn chương trình dùng hàm, có kiểu trả về là một
b)Viết đoạn chương trình tính số thồng kê

- Trang 139 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Function Thongke( ch: Char ;N: String):String;
Var s: String;
Tam, i: Integer;
Begin
Tam:=0;
For i:=1 To Length(s) Do
If N[i] = ch Then Tam:= Tam+1;
Str( Tam, S);
Thongke:=S;
End;
c)Cài đặt chương trình:
Program Bai_tap_7.14;
Var n,Tk: String[50];
j :Char;
Function Thongke( ch: Char ;N: String):String;
Var s: String;
Tam, i: Integer;
Begin
Tam:=0;
For i:=1 To Length(s) Do
If N[i] = ch Then Tam:= Tam+1;
If Tam<>0 Then Str( Tam, S)
Else S:=’’;
Thongke:=S;
End;
BEGIN
Write(‘Nhap vao xau so N:’);Readln(N);
Tk:=’’;
For i:=’0’ To ‘9’ Do
If Thongke(i ,N)<>’’ Then Tk:=Tk+Thongke(i,N) + i
Else;
Write(Tk);
Readln;
END.
d)Test:
N:’1223’
+i =’0’
Thongke( i,N)=’’ bỏ qua
+ i =’1’
Thongke(i ,N)<>’’ :Tk:=’’+ ‘1’+’1’=’11’
+ i =’2’
Thongke(i ,N)<>’’ :Tk:=’11’+’2’+’2’=’1122’
+ i =’3’
Thongke(i ,N)<>’’ :Tk:=’1122’+’1’+’3’=’112213’
+ i=’4’
Thongke(i ,N )=’’ bỏ qua
+ i =’5’…….i =’9’
In ra :Tk =112213

- Trang 140 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
e)Bài tập tương tự:
Bài 1:Nhập vào dãy số, tìm số lần xuất hiện nhiều nhất của một số trong dãy đó.
Bài 2:Nhập vào một xâu chữ cái và một kí tự bất kì,sau đó đếm số lần xuất hiện của chữ cái
đó.

Nguyễn Thị Hồng


Bài 3.31 (SBT trang 23)
Lập trình nhập số thực x và số nguyên dương n từ bàn phím. Tính và đưa ra màn hình
giá trị biểu thức:
P = 1 + 2x + 3x2 + …+ nxn-1+(n+1)xn
Giải:
- Buớc 1: Tìm hiểu đề bài
 Xác định Input: x, n;
 Xác định Output: P;
- Buớc 2: Xây dựng ý tưởng giải thuật
 Nhắc lại cách tính xn= exp(n*ln(x ))
 Vẽ sơ đồ khối:

- Trang 141 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Begin

Nhập x, n

I:=1; P:=0;

i<n F

T
P:= P+ i*exp((i-1)*ln(x));
I:=i+1;

In P và
Kết thúc

- Buớc 3: Viết chương trình


Program Tinh_tong;
Uses crt;
Var
x, p:real;
i,n:integer;
Begin
Clrscr;
P:=0;
Writeln('Nhap x= '); Readln(x);
Writeln('Nhap n= '); Readln(n);
For i:=1 to n do
P:= P+i*exp((i-1)*ln(x));
Writeln('Gia tri cua P= ',P:4:2);
Readln
End.
- Buớc 4: Nghiên cứu về lời giải
 Xây dựng bộ test : Nhập x=2.0; n= 3;
i P:=0

- Trang 142 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
1 P:=0+1*exp(0*ln(2.0))= 1.00
2 P:=1.00+2*exp(1*ln(2.0))= 5.00
3 P:=5+3*exp(2*ln(2.0))= 17.00
 Mở rộng bài toán : - Giải các bài toán tương tự như: tính tổng P= (n+1)+ nx+(n-1)x2+
…+ 2xn-1+xn, …

BÀI 4.50 (Sách BT Tin học trang 49)


- Buớc 1: Tìm hiểu đề bài
 Xác định Input: nhập kích thuớc bản ghi gồm l, h, w;
 Xác định Output: + Số lượng thùng rỗng N
+ Số thùng còn chiếm chỗ trong kho M;
- Buớc 2: Xây dựng ý tưởng giải thuật
 Để dồn được thùng rỗng ta phải:
+ Vì thùng có thể lật được nên ta có thể hoán đổi vị trí giữa 3 trường dài, rộng, cao.
Do đó ta cần sắp xếp lại các trường theo thứ tự giảm dần từ chiều dài đến chiều cao.
+ Ta cũng sắp xếp các thùng theo kích thước tăng dần
 Xây dựng các bước thể hiện giải thuật
+ Bước 1: Nhập chiều dài, rộng, cao từng thùng theo kiểu bản ghi
+ Buớc 2: N:=0, i:=1; M:=0
+ Bước 2: Khi (chiều dài <>0, chiều rộng <>0, chiều cao <>0) hoặc N>=100 thì :
- N:=N+1;
- Nhập chiều dài, chiều rộng, chiều cao;
+ Buớc 3: N:=N-1 và Thông báo ra màn hình
+ Buớc 4: Gán M:=N; sang bước 5;
+ Buớc 5: Sắp xếp các trường của thùng theo thứ tự giảm dần;
+ Bước 6: Sắp xếp các thùng theo chiều dài của mỗi thùng thứ tự tăng dần;
+ Bước 7: Khi chưa hết thùng rỗng thì thực hiện:
- Thực hiện việc dồn thùng;
- M:= M-1;
+ Bước 8: Ghi số thùng chiếm chỗ và kết thúc.
- Bước 3: Viết chương trình

Program DON_THUNG;
uses crt;
type thungrong = record
l, w, h: byte;
end;
Var
thung: array[1..100] of ThungRong;
N, M, i,t,p,j,k,tg1,tg: byte;
A:array[1..3] of byte;
Begin
clrscr;
N:=1; i:=1;

- Trang 143 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Writeln('Nhap chieu dai, rong, cao');
Readln(Thung[N].l, thung[N].w, thung[N].h);
While (((thung[n].l <>0) and(thung[n].w<>0) and (thung[n].w<>0)) or (N>100)) do
Begin
N:= N+1;
Readln(Thung[N].l, thung[N].w, thung[N].h);

end;
N:= n-1;
writeln('So thung rong la:',N);

For i:=1 to n do
begin
a[1]:=thung[i].l;
a[2]:=thung[i].w;
a[3]:=thung[i].h;
for t:=1 to 2 do
for k:=t+1 to 3 do
if a[t]< a[k] then
begin
tg:=a[k];
a[k]:=a[t];
a[t]:=tg;
end;
thung[i].l:=a[1];
thung[i].w:=a[2];
thung[i].h:=a[3];
end;
for i:=1 to n-1 do
for j:=i+1 to n do
if thung[i].l>thung[j].l then
begin
tg1:= thung[j].l;
thung[j].l:=thung[i].l;
thung[i].l:= thung[j].l;
end;
M:=n; p:= n;
for i:=1 to p do
for j:=i+1 to p-1 do
if (thung[i].l<thung[j].l)
and (thung[i].w < thung[j].w)
and (thung[i].h <thung[j].h) then
M:=m-1;
Writeln('sau khi don so thung la',M);

- Trang 144 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
readln
End.
- Bước 4:Nghiên cứu lời giải
+ Giả sử ta nhập chiều dài, chiều rộng, chiều cao của các thùng như sau:

7 5 4
6 4 6
8 7 5
7 5 3
9 5 7
0 0 0

- Kết quả trả về: Số thùng rỗng là 5;


- Số thùng chiếm chỗ sau khi dồn là 3

BÀI TẬP

Bộ môn: PHƯƠNG PHÁP GIẢI BÀI TẬP PHỔ THÔNG

Sinh viên: Nguyễn Thị Thanh.


Ngày sinh: 02/11/1986.
Lớp Tin 4B.

☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺

Bai 4.22 (Sách BT Tin học 11):

- Trang 145 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Đề bài:
Lập trình:
 Nhập từ bàn phím hai số nguyên M và N (-32768 <= M, N <= 32768).
 Tính và đưa ra màn hình số lần xuất hiện của các chữ số có nghĩa của tổng M + N trong
dạng biểu diễn thập phân. Kết quả đưa ra dưới dạng:
SO LAN XUAT HIEN CHU SO < chữ số > : < số lượng >
Theo thứ tự tăng dần của các chữ số .
Ví dụ, với M = 309 và N = 21, kết quả đưa ra màn hình sẽ là:
SO LAN XUAT HIEN CHU SO 0: 1.
SO LAN XUAT HIEN CHU SO 3: 2.

Giải:
* Bước 1: Tìm hiểu đề bài:
- Xác định Input: Nhập hai số nguyên M, N.
- Xác định Output: Tính và đưa ra số lần xuất hiện các chữ số của tổng M + N.

* Bước 2: Xây dựng ý tưởng giải thuật:


- Nhập vào giá trị cho hai biến M, N.
- Dúng một biến mảng để lưu các chữ số của tổng M + N, mảng đó sẽ chứa phần tử kiểu số thực
từ 0 đến 9.
- Sử dụng biến t để lưu tổng M + N, và thực hiện kiểm tra đếm chữ số có trong tổng.

* Bước 3: Trình bày lời giải:


- Nhập vào các giá trị cho hai biến M, N.
- Gán t : = M + N;
- Khai báo mảng a : array[0..9] of byte.
- Cho I chạy từ 1 tới 9 và thực hiện gán a[i] : = 0.
- Kiểm tra khi t > 0 thi thực hiện gán cs : = t mod 10 để lấy chữ số đầu tiên của tổng và tăng số
lần xuất hiện của chữ số bằng inc(a[cs]), sau đó thực hiện gán lại tổng t : = t div 10.
- Kiểm tra a[i] <> 0 với i chạy từ 1 đến 9 để in số lần xuất hiện của chữ số trong tổng.

* Bước 4: Nghiên cứu về lời giải:


- Xây dựng chương trình:

Program DEM_CHU_SO;
Uses crt;
Var t, i, cs, M, N: integer;
a : array[0..9] of byte;
Begin
Clrscr;
Write(‘ Nhap gia tri cho M: ‘);
Readln(M);
Write(‘ Nhap gia tri cho N: ‘);
Readln(N);
For i : = 0 To 9 Do a[i] : = 0;
t : = M + N;
While t > 0 Do
Begin

- Trang 146 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
cs : = t mod 10;
Inc (a[cs]);
t : = t div 10;
End;
For i : = 0 To 9 Do
If a[i] <>0 then
Writeln(‘ So lan xuat hien chu so ‘,i,’ trong tong la: ‘,a[i]);
Readln;
End.

- Xây dựng lớp bài toán tưong tự:


Viết chương trình nhập vào một dãy 10 số nguyên khác nhau từng dôi một. Hãy chỉ ra độ dài
của dãy con gồm các phần tử liên tiếp tăng mà có số phần tử nhiều nhất.( Xem HD trang 44 – Bài
giảng NNLT Pascal)

Bài 6.20 ( Sách BT Tin học 11).


Đề bài:
Cho dãy số thực a = {a1, a2, a3,..., an }. Hãy mô tả thủ tục MINA(a, n, x,im) xác định x = Min{ai }, im
- chỉ số nơi đạt min.
Ví dụ, với n = 8 và a = (5, 6, 8, 2, 4, 6, 9, 3), thủ tục nói trên sẽ cho kết quả x =2 và im = 4.

Giải:
* Bước 1: Tìm hiểu đề bài:
- Xác định Input: Nhập vào dãy số thực a = {a1, a2, a3,..., an }.
- Xác định Output: Giá trị nhỏ nhất x = Min{ai } của dãy và vị trí im của nó.

* Bước 2: Xây đựng ý tưởng giải thuật:


- Sử dụng mảng một chiều để lưu dãy số.
- Gán min bằng giá trị đầu tiên của mảng, và thực hiện so sánh với các phần tử còn lại của mảng
để tìm ra phần tử nhỏ nhất của mảng.
- Có thể xây dựng ý tưởng bằng sơ đồ giải thật:

Gán min : = a[1]


i:=2

F In ra min
i <= n và vị trí i
min >
- Trang 147 -
a[i]
inc (i)
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

T
F

T
min : = a[i]

* Bước 3: Trình bày lời giải:


- Khai báo biến mảng a[i] để lưu dãy số thực.
- Gán min : =a[1];
- Thực hiện so sánh min với các giá trị còn lại của mảng, nếu gia trị min lơn hơn thì thực hiện
tăng i lên, ngược lại thì gán lại min : = a[i].
- Khi i > n thì in giá trị min và vị trí đó.
* Bước 4: Nghiên cưu lời giải:
- Viết chương trình:
Program In_min;
Uses crt;
Type mang:array[1..100] of integer;
Var n,i,x,im,Min:integer;
Procedure MINA ( Var a :mang; n:integer; Var x, im: integer);
Begin
Min : =a[1];
For i : = 2 to n do
If Min > a[i] then
Begin
Min: =a[i];
im:=i;
End;
x : = Min;
End.
BEGIN
Write(‘ Nhap so phan tu mang: ‘); Readln(n);
For i:=1 To n Do
Begin
Write(‘ Nhap gia tri phan tu: a[‘,i,’ ] = ‘);
Readln(a[i]);
End;
MINA(a, n, x, im);
Writeln(‘ Phan tu nho nhat trong day la: ‘,x,’ tai vi tri ‘,i,’ cua day’);
Readln;
END.
- Dạng bài toán tương tự:
Nhập vào dãy số và in ra số lớn nhất và vị trí của nó trong dãy.

- Trang 148 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

Họ và tên: Tào Ngọc Anh.


Tin 4B

Bài tập:
Bài 3.16 (Sách bài tập Tin Hoc 11)
Lập trình nhập từ bàn phím hai số nguyên khác nhau m và n, thay số nhỏ hơn bằng hiệu của
số lớn với số bé, thay số lớn hơn bằng tổng của hai số ban đầu. Đưa ra các giá trị mới của m
và n ra màn hình

- Trang 149 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Giải:
* Tìm hiểu đề bài:
In put: m,n
Out put: giá trị mới của m,n.
* Ý tưởng giải thuật:
-Bước 1: Nhập vào m, n từ bàn phím
-Bước 2: Nếu m>n thì
Tg:=m;
m:=m+n;
n:=tg-n;
Nếu n>m thi
Tg:=n;
n:= n+m;
m:=tg-m;
-Bước 3: Đưa ra màn hình giá trị mới của m và n.
-Bước 4: Kết thúc.
Sơ đồ khối:
Be
gin
Nhập m,n.

Đ
m>=n

Tg:=m; Tg:=n;
m:= n-m; n:= m-n;
n:=tg+n m:=tg+m

In ra m, n

End

* Thuật toán:
var m,n,tg:integer;
begin
write('Nhap vao 2 so m,n:');readln(m,n);

- Trang 150 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
if m>n then
begin
tg:=n;
n:=m-n;
m:=tg+m;
end
else
begin
tg:=m;
m:=n-m;
n:=tg+n;
end;
writeln('gia tri moi cua m la:',m);
writeln('gia tri moi cua n la:',n);
readln;
end.
Bài 437 (Sách bài tập Tin Học 11)
Tên các tháng trong một năm theo âm lịch là Giêng, Hai, Ba, Tư, Năm, Sáu, Bảy, Tám,
Chín, Muời, Một, và Chạp. Ba tháng đầu tiên trong năm là mùa xuân, ba tháng tiếp theo là
mùa hè, sau đó là ba tháng mùa Thu và cuối cùng là ba tháng mùa Đông. Hãy lập trình:
- Nhập từ bàn phím tên một tháng âm lịch (tiếng Việt không dấu);
- Đưa ra màn hình mùa của tháng đó (tiếng việt không dấu). Lưu ý là tên tháng nhập
vào có thể chỉ chứa các kí tự hoa hoặc chỉ chứa các kí tự thường hoặc có cả chữ hoa
chữ thường.
Giải
* Tìm hiểu đề bài:
In put: Nhập một tháng âm lịch.
Out put: Mùa của tháng đó

* Ý tưởng giải thuật:


-Bước 1: Nhập vào tên một tháng âm lịch: THÁNG dùng hàm upcase (tên tháng)
-Bước2: Gán
P=”GIENGHAI**BA***TU***NAM**SAU**BAY**TAM*CHIN*MUOI*MOT*
*CHAP”
Tính i= ((pos(THANG,P)-1)div 5)div 3
i=0 thì mùa là mùa XUAN
i=1 thì mùa là mùa HA
i=2 thì mùa là mùa THU
i=3 thì mùa là mùa DONG
-Bước 3: Đưa ra màn hình mùa của tháng.
* Chương trình
var s,p: string;
i:byte;
BEGIN

- Trang 151 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
REPEAT
write(' Nhap vao ten thang');readln(s);
for i:=1 to length(s) do
s[i]:=upcase(s[i]);

p:='GIENGHAI**BA***TU***NAM**SAU**BAY**TAM**CHIN*MUOI*MOT
**CHAP';
if ((( pos(s,p)-1)div 5)div 3=0) then
writeln('mua xuan');
if (((pos(s,p)-1)div 5)div 3 =1) then
writeln('mua he');
if (((pos(s,p)-1)div 5)div 3 =2)then
writeln('mua thu');
if ( ((pos(s,p)-1)div 5)div 3=3)then
writeln('mua dong');
UNTIL S='';
readln
END.
Họ và tên :Lê Thị Thanh Phương
Lớp tin 4B.
Bài tập môn: Phương pháp giải bài tập tin học
Bài 4.9
Cho dãy số A=(a1,a2,….an),ai_nguyên, i=1,2,...n và 3<n<=100).Viết đoạn chương trình
khai báo biến cần sử dụng và đếm số lượng phần tử ở vị trí chẵn có giá trị lẻ.
Bài làm:
Bước 1: Tìm hiểu đề bài.
Input: Nhập mảng A=(a1,a2,…,an)
Output: Số lượng phần tử ở vị trí chẵn có giá trị là lẻ.
Bước 2: Xây dựng ý tưởng giải thuật.
Tập hợp các kiến thức liên quan:
+ Cách khai báo mảng;
+ Cẩu trúc rẽ nhánh (if-then);
+ Cấu trúc lặp (for- do; while- do);
Sơ đồ khối:
begin

- Trang 152 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

Nhập mảng A,n

i:=1; m:= ndiv2;


dem:=0;

S
i<n

Đ
S
odd(a [i*2
] i:=i+1;

Đ
dem:=dem+1;
n:=m;

in ket qua

end

Bước 3: Chương trình:

VAR A:ARRAY[1..100] OF INTEGER;


M,N,DEM,I:INTEGER;
BEGIN
WRITE('NHAP N=');READLN(N);
FOR I:=1 TO N DO
BEGIN
WRITE('A[',I,']='); READLN(A[I]);
END;
DEM:=0;
M:=N DIV 2;
FOR I:=1 TO M DO
IF odd(a[i*2]) THEN DEM:=DEM+1;
n:=m;
WRITELN('SO CHU SO CAN TIM LA:',DEM);

- Trang 153 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
READLN
END.

Bước 4:Nghiên cứu về lời giải.


- Xây dựng bộ test.
1.Em nào hãy khai báo kiểu mảng một chiều A?
2.Hãy viết đoạn chương trình nhập mảng A[I] từ bàn phím?
3.Vị trí chẵn ở đây có nghĩa là gì?Làm thế nào để xác định đó là vị trí chẵn?
4.Giá trị lẻ ? Làm thế nào để xác định đó là giá trị lẻ?
Bài 6.13:
Hãy mô tả hàm EMU(x, esp) trả về giá trị ex với độ chính xác esp(x, esp nhận giá trị thực,
esp >0) theo công thứ ex =1+∑ . Độ chính xác esp đạt được khi
Bài làm:
Bước 1: Tìm hiểu đề bài.
Input: Nhập a,b,x,s,n;
Output: Trả về giá trị ex với độ chính xác esp(x)
Bước 2: Xây dựng ý tưởng giải thuật.
Mô tả bằng hàm EMU(x, esp) với các bước sau:
B1: Nhập a,b,x,s,n;
B2: ketqua:=1;s:=x;n:=0;
B3: Chừng nào |s|>=esp thì sang B4;;sai thì quay về B1;
B4: n:=n+1; s:=s*x/n; ketqua:=ketqua+s;
B5:EMU:=ketqua;
B6:Kết thúc.
Bước 3: Chương trình:
var esp,x,a,b,h:real;
function EMU(x,esp:real):real;
var s,ketqua:real;
n:integer;
begin
ketqua:=1;
s:=x;
n:=0;
while abs(s)>=esp do
begin
n:=n+1;
s:=s*x/n;
ketqua:=ketqua+s;
end;
EMU:=ketqua;
end;
begin
esp:=0.0001;

- Trang 154 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
write('a,b,h=');
readln(a,b,h);
x:=a;
while x<=b do
begin
writeln(x:10:2,EMU(x,esp):10:2);
x:=x+h;
end;
end.

BÀI TẬP
MÔN PHƯƠNG PHÁP GIẢI BÀI TẬP TIN HỌC
Họ và tên: Trần Thị Lan
Lớp : Tin 4B
Đề bài:
Câu 1: (3.37 – SBT Tin học 11)
Trên thế giới chỉ có một quốc gia có quốc kì không phải là hình chữ nhật. Ở các nước còn lại,
trong đó có có Việt Nam, quốc kì có hình chữ nhật. Hình chức nhật của lá quốc kì phải là hình chữ
nhật cân đối nhất. Độ dài các cạnh lá quốc kì phải tuân thủ quy tắc thiết diện vàng. Nếu gọi x là
5 1
x
chiều dài và y là chiều rộng của quốc kì, thì ta có: y = 2 .
 
Người ta may N (2 N 10) lá quốc kì, chiều dài lá quốc kì thứ i bằng độ cao lá quốc kì thứ i – 1, i
= 2, 3,. . .,N.
Cho biết chiều rộng y của lá quốc kì thứ K trong số N lá quốc kì đã được may (1  K  N). Viết đoạn
chương trình tính chiều dài, chiều rộng của lá quốc kì lớn nhất và của lá quốc kì nhỏ nhất.

- Trang 155 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Câu 2: (5.10 SBT Tin học 11)
Cho một tệp văn bản ORD1.DAT và ORD2.DAT mỗi dòng của tệp chứa một số nguyên có giá
trị tuyệt đối không vượt quá 2 147 483 647. Trong mỗi tệp, các số đã được sắp xếp theo thứ tự
không giảm. Hãy lập trình hợp nhất hai tệp này thành văn bản ORD.DAT mỗi dòng chứa một số
nguyên, sao cho các số vẫn giữ nguyên thứ tự không giảm.
Bài làm:
Câu 1:
Bước 1: Tìm hiểu đề bài
Xác định yếu tố kiến thức được cung cấp
May N lá quốc kì (2  N  10).
5 1
x
Nếu chiều rộng lá quốc kì là x thì chiều dài lá quốc kì là y = 2
Chiều dài lá quốc kì thứ i bằng độ cao lá quốc kì thứ i -1, i = 2, 3, . . ., N
Cho biết chiều rộng y của lá quốc kì thứ K (1  K  N).
Xác định các yêu cầu cần giải quyết
Viết đoạn chương trình tính:
- Chiều rộng, chiều dài lá quốc kì lớn nhất.
- Chiếu rộng, chiều dài lá quốc kì nhỏ nhất.
Bước 2: Xây dựng ý tưởng giải thuật
Các kiến thức liên quan
Tìm Max, Min của một dãy số.
Sử dụng cấu trúc lặp để nhập N, K theo điều kiện: (2  N  10), (1  K  N).
Biết y từ đó suy ra x = 2*y/(sqrt(5) – 1)
Định hướng xây dựng giải thuật
Vì N, K đề bài đã cho nên ta sử dụng vòng lặp để tính chiều rộng, chiều dài của hình chữ nhật lớn
nhất và nhỏ nhất.
Chiều dài lá quốc kì thứ i bằng độ cao lá quốc kì thứ i -1, mà biết chiều rộng lá quốc kì thứ K. Do
đó, để tìm Max chiều rộng, Max chiều dài của lá quốc kì ta duyệt từ lá quốc kì thứ K-1 về lá quốc kì
thứ 1. Để tìm Min chiều rộng, Min chiều dài của lá quốc kì ta duyệt từ lá quốc kì thứ K+1 tới lá
quốc kì thứ N.
Thể hiện giải thuật
B1: Nhập chiều rộng y.
B2: Nếu y <= 0 thì quay lại B1.
B3: Nhập N (số lá quốc kì cần may)
B4: Nếu (N < 2) or (N > 10) thì quay lại B3.
B5: Nhập K (là lá quốc kì thứ K trong N lá quốc kì cần may)
B6: Nếu (K < 1) or (K > N) thì quay lại B5.
B7: Gán: tgy : = y; t : = sqrt(5) – 1; x: = 2*y/t; tgx : = x;
B8: Nếu i > K – 1 thì chuyển tới B12.
B9: - Thực hiện gán: tgy : = tgx; tgx : = 2*tgy/ t; i: = K - 1;
i: = K - 2 ;
Chuyển đến B12.
B10: In ra giá trị tgy, tgx.
B11: - Thực hiện: tgx : = tgy; tgy : = t*tgx / 2; i: = K + 1
i: = K + 2;
Chuyển đến B12.
B12: Kết thúc.

- Trang 156 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Bước 3: Trình bày lời giải
Program LAQUOCKI;
Uses crt;
Var k, n, i: integer;
t, x, y, tgy, tgx : real;
Begin
clrscr;
y:=0;
While y <= 0 do
Begin
Write('Nhap vao gia tri chieu rong y:'); Readln(y);
If (y = 0) then Writeln('Moi ban nhap lai');
End;
Repeat
Write('Nhap vao gia tri n:'); Readln(n);
If ( n<2) and ( n>10 )then Writeln('Moi ban nhap lai gia tri n');
Until ( n>=2) and ( n<=10 ) ;
k:=0;
Repeat
Write('Nhap vao gia tri k:'); Readln(k);
If ( k<1) and ( k>n )then Writeln('Moi ban nhap lai k');
Until ( k>=1) and ( k<=n) ;
tgy:=y; t:= sqrt(5)-1; x:=2*y/t; tgx:=x;
For i:=k -1 downto 1 do
Begin
tgy:=tgx;
tgx:=2*tgy/t;
End;
Writeln('Chieu dai va chieu rong lon nhat cua la quoc ki:');
Writeln(tgx:6:2,' ',tgy:6:2); Readln;
tgy:=y; tgx:=x;
For i:=k+1 to n do
Begin
tgx:=tgy;
tgy:=t*tgx/2;
End;
Writeln('Chieu dai va chieu rong be nhat cua la quoc ki:');
Writeln(tgx:6:2,' ',tgy:6:2); Readln;
End.
Bước 4: Nghiên cứu về lời giải
Xây dựng bộ Test: Cho N = 6, K = 2, y = 4
Câu 2:
Bước 1: Tìm hiểu đề bài
Xác định yếu tố kiến thức được cung cấp
Cho hai tệp ORD1.DAT và ORD2.DAT mỗi dòng chứa 1 số nguyên (trị tuyệt đối của n < 2 147 483
647)
Các số được sắp xếp không giảm (tăng)
Xác định các yêu cầu cần giải quyết

- Trang 157 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Hợp 2 tệp thành tệp ORD.DAT sao cho mỗi dòng chứa 1 số nguyên theo chiều tăng.
Bước 2: Xây dựng ý tưởng giải thuật
Các kiến thức liên quan
Các thủ tục thao tác với tệp: Mở tệp, Đọc tệp, Ghi tệp, Đóng tệp.
Các hàm xử lý tệp
Sắp xếp các số trong tệp.
Định hướng xây dựng giải thuật
Mở hai tệp ORD1.DAT và ORD2.DAT
Khi mà cả hai tệp còn chưa Eof(f) thì so sánh giá trị của hai tệp f1, f2. Gía trị nào nhỏ hơn thì ghi
vào tệp f. Sau đó, tiếp tục so sánh giá trị còn lại với giá trị tiếp theo của tệp kia.
Thể hiện giải thuật
B1: Mở tệp: - assign ( f, ‘ORD.DAT ); rewrite (f );
- assign (f1, ‘ORD1.DAT’); reset (f1);
- assign (f2, ‘ORD2.DAT’); reset (f2);
B2: Khi not eof (f1) and not eof (f2) thì:
- Khởi tạo i:= 0; j:= 0; k:= 0;
Di chuyển con trỏ file về vị trí thứ i, đọc dữ liệu từ tệp f1.
Di chuyển con trỏ file về vị trí thứ j, đọc dữ liệu từ tệp f2.
Nếu a <= b thì :
+ Đưa trỏ tệp về vị trí thứ k của tệp f
+ Ghi giá trị a vào tệp f
+ i:= i+1;
- Nguợc lại
+ Đưa trỏ tệp về vị trí thứ k của tệp f
+ Ghi giá trị b vào tệp f
+ j:= j+1;
- k:= k+1;
B3: Đóng các tệp lại. KT.
Bước 3: Trình bày lời giải
Program Hop_haitep;
Uses CRT;
Var f, f1, f2: text;
a, b: real;
i, j, k: integer;
Begin
Assign (f,'D:\ORD.DAT'); Rewrite(f);
Assign (f1,'D:\ORD1.DAT'); Reset(f1);
Assign (f2,'D:\ORD2.DAT'); Reset(f2);
i:=0; j:=0; k:=0;
While not eof(f1) or not eof(f2) do
Begin
Seek(f1,i);
Read(f1, a);
Seek(f2, j);
Read(f2, b);
If a<=b then
Begin
Seek(f, k);

- Trang 158 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Write(f, a);
i:=i+1;
End
Else
Begin
Seek(f, k);
Write(f, b);
j:=j+1;
End;
k:=k+1;
End;
If not eof(f1) then write(f, a);
If not eof(f2) then write(f, b);
Close(f1);
Close(f2);
Close(f);
End.
Bước 4: Nghiên cứu về lời giải
Xây dựng bộ TEST:
ORD1.DAT (1, 3, 5)
ORD2.DAT (3, 4, 6, 8)
Khi chạy chương trình ta được kết quả là tệp ORD.DAT chứa các giá trị sau:
ORD( 1, 3, 3, 4, 5, 6, 8)

Họ và tên: Lê Thị Minh Tâm Môn : Phân tích chương trình


Lớp: Tin 4b phổ thông
Bài thực hành

Bài 4.16)
a)
Bước 1: - Input: Bảng số nguyên A kích thước 5x5 ( Nhập vào mảng 2 chiều)
- Output: Tổng các phần tử trên đường chéo chính

Bước 2: + Ý tưởng giải thuật:

- Trang 159 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Nhập vào mảng hai chiều kích thước 5x5. Lúc đầu tổng được gán bằng 0. Sau đó
cho một vòng for duyệt từ 1 đến 5 thì tổng sẽ được gán bằng tổng lúc đầu cộng với
phần tử ở dòng i và cột i.
+ Sơ đồ thuật toán:

Begin

Nhập mảng

s:=0; i:=0;

F
i<=5 In s

T
s:=s+ a[i,i];
i:=i+1;

end

Bước 3: Viết chương trình:


Program tongcc;
Var i,j: Integer;
Begin
For i:=1 to 5 do
For j:=1 to 5 do
Begin
Write(‘a[‘,i,’,’,j,’] =’);
Readln(a[i,j]);
End;
S:=0;
For i:=1 to 5 do s:=s+a[i,i];
Writeln(‘Tong cac phan tu tren duong cheo chinh la:’,s);
Readln;
End.
Bước 4:
Chạy minh hoạ:

- Trang 160 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
S a[i,i] i
5 3 8 2 1
4 2 6 1 0 0 5 1
5 2 2
2 3 4 5 6
7 4 3
9 8 7 6 5
11 6 4
1 3 5 7 9
17 9 5
26

b)
Bước 1: - Input: Bảng số nguyên A kích thước 5x5 ( Nhập vào mảng 2 chiều)
- Output: Tổng các phần tử trên đường chéo chính và phụ.
Bước 2:
+ Ý tưởng giải thuật:
Nhập mảng hai chiều kích thước 5x5. Để tính tổng các phần tử trên đường chéo chính và phụ thì ta
lấy tổng các phần tử trên đường chéo chính cộng với tổng các phần tử trên đường chéo phụ rồi trừ đi
phần tử ở dòng 3 và cột 3 ( Vì phần tử này được cộng 2 lần).

Begin

Nhập mảng

s:=0; i:=1;j:=5;
s1:=0;
i:=0;

F
+ Sơ đồ thuật toán: i<=5;j>=1 In s+s1-a[3,3]]
F
T
s:=s+ a[i,i];
s1:=s1+a[i,j];
i:=i+1;
j:=j-1;

- Trang 161 -
end
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

Bước 3: Viết chương trình:


Program caub;
Var i,j,s,s1:integer;
Begin
For i:=1 to 5 do
For j:=1 to 5 do
Begin
Write(‘a[‘,i,’,’,j,’] =’);Readln(a[i,j]);
End;
s:=0;s1:=0;
For i:=1 to 5 do s:=s+a[i,i];
i:=1;j:=5;
While (i<=5) and(j>=1) do
.
Begin
s1:=s1+a[i,j];
i:=i+1;j:=j-1;
End;
Writeln(‘tong cac phan tu tren duong cheo chinh va phu la:’,s+s1-a[3,3]);
Readln
End.
Bước 4: Chạy minh hoạ:
S a[i,j] i j
5 3 8 2 1
4 2 6 1 0 0 1 1 5
1 1 2 4
2 3 4 5 6
2 4 3 3
9 8 7 6 5
6 8 4 2
14 1 5 1
15 -
- Trang 162
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
1 3 5 7 9

Tong:= s+s1-a[3,3]= 26+15-4=27

6.18)
a)
Bước 1:
+ Input: cho khai báo kiểu dữ liệu về mảng hai chiều:
TYPE MT=array[1..50,1..50] of integer; biến B thuộc kiểu MT, có m dòng và n cột
+ Output: Viết thủ tục Swapline để đổi chỗ 2 dòng i và j của B.
Bước 2: Ý tưởng giải thuật:
- Viết thủ tục đổi chỗ 2 số a và b
- Thủ tục đổi chỗ 2 dòng i và j của B được viết bằng cách ta khai báo 1 biến k, cho 1 vòng For
duyệt từ k=1 đến m, sau đó dùng thủ tục đổi chỗ 2 số để đổi chỗ 2 dòng i và j của B.

Bước 3: Sơ đồ thuật toán:

Begin

- Trang 163 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Bước 4:

Nhap mang B,k,i,j

k:=1

F
k<=m

doicho(B[i,k],B[j,k]);
k:=k+1;

end

Procedure doicho(var a,b:integer);


Var tg:integer;
Begin
tg:=a;a:=b;b:=tg;
End;
Procedure Swaplin( var B:MT,m,n,i,j:integer);
Var k:integer;
Begin
For k:=1 to m do doicho(B[i,k],B[j,k]);
End;
b)
Bước 1:
+ Input: cho khai báo kiểu dữ liệu về mảng hai chiều:
TYPE MT=array[1..50,1..50] of integer; biến B thuộc kiểu MT, có m dòng và n cột
+ Output: Viết thủ tục Swapcol để đổi chỗ 2 cột p và q của B.

Bước 2: Ý tưởng giải thuật:


- Viết thủ tục đổi chỗ 2 số a và b
- Thủ tục đổi chỗ 2 cột p và q của B được viết bằng cách ta khai báo 1 biến k, cho 1 vòng For
duyệt từ k=1 đến n, sau đó dùng thủ tục đổi chỗ 2 số để đổi chỗ 2 cột p và q của B.

Bước 3: Sơ đồ thuật toán:

Begin
- Trang 164 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

Nhap mang B,k,i,j

k:=1

k<=n
T

doicho(B[k,p],B[k,q])
k:=k+1;

end

Bước 4:
Procedure doicho(var a,b:integer);
Var tg:integer;
Begin
tg:=a;a:=b;b:=tg;
End;
Procedure Swapcol( var B:MT,m,n,p,q:integer);
Var k:integer;
Begin
For k:=1 to m do doicho(B[k,p],B[k,q]);
End;

Họ tên : Chu Thị Phương Thủy

- Trang 165 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Lớp Tin 4B
BÀI 4.26
Bước 1:
Input: Nhập n, tọa độ đỉnh (xi,yi)

Output: In ra màn hình toa độ đỉnh trên trái và dưới phải

- Trang 166 -
Begin
n
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal Nhap n bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
online,
I:=1;

F
I<=n

T
Nhap
a[i].x,a[i].y,
I:=i+1;

I:=1; maxx:=minx:=a[1].x;
Maxy:=miny:=a[1].y;

I<n; F In toa do
end

T
Maxx<a[i].x T Maxx:=a[i].x

F
Minx>a[i].xx Mixx:=a[i].x
T

F
Maxy<a[i].y Maxy:=a[i].y
T

Miny>a[i].y Miny:=a[i].y

I:=i+1

- Trang 167 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

Bước 3:

Chương trình
Type
Diem=record
x,y: real;
End;
Var mang=array[1…40] of integer;
Repeat
Begin

Write(‘ nhâp n:’);readln(n);


Write(‘ nhâp hoành độ:’);readln(a[i].x);
Write(‘ nhâp tung độ:’);readln(a[i].y);
End;
Until n<0;
For i:=1 to n do
Begin
If maxx <a[i].x then maxx:=a[i].x;
If minx >a[i].x then minx:=a[i].x;
If maxy <a[i].y then maxy:=a[i].y;
If miny >a[i].xythen miny:=a[i].y;
End;
Writeln(‘toa do tren trai la:’,minx’,’maxy);
Writeln(‘toa do duoi phai la:’,maxx’,’miny);
Readln;
End.
BÀI 7.13
Bước 1:
Input: nhập kí tự thuộc tập {C,F,K}, Số thực T
Output: Đưa ra màn hình 2 thang nhiệt độ còn lại
Bước 2:
Bước 1:Nhập vào một kí tự thuộc tập {C,F,K}, số thực T
Bước 2: Nếu kí tự là C thì tính Nhiệt độ K và F và in ra màn hình
TF:=(9*TC)/5+32;
TK:=(TF+459.67)*5/9;

Bước 3: Nếu kí tự là F thì tính nhiệt độ C va K và in ra màn hình


TC:=(5*TF+160)/9;
TK:=(TF+459.67)*5/9;

Bước 4: Nếu kí tự là K thì tính nhiệt đô C và F và in ra màn hình

- Trang 168 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
TC:=(5*TF+160)/9;
TF:=(5*TK+160)/9;

Bước 5: Dừng
Bước 3: Chương trình
Var ch:char;
T,TC,TK,TF:real;
Begin
Write(‘nhap ki tu:’);readln(ch);
Write(‘ nhap so thuc T:’);readln(T);
End;
If ch=’C’ then
Begin
TF:=(9*TC)/5+32;
TK:=(TF+459.67)*5/9;
Write(‘nhiet do F khi biet nhiet do C:’,TF);
Write(‘nhiet do K khi biet nhiet do C:’,TK);
End;
If ch=’F’ then
Begin
TC:=(5*TF+160)/9;
TK:=(TF+459.67)*5/9;
Write(‘nhiet do C khi biet nhiet do F:’,TC);
Write(‘nhiet do K khi biet nhiet do F:’,TK);
End;
If ch=’K’ then
Begin
TC:=(5*TF+160)/9;
TF:=(5*TK+160)/9;
Write(‘nhiet do C khi biet nhiet do K:’,TC);
Write(‘nhiet do F khi biet nhiet do K:’,TF);
End;
End.

- Trang 169 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

Sinh viên: Lê Hữu Hùng


Lớp: Tin 4B
Phương pháp giải bài tập Tin học
 Bài tập 3.33 trang 23 sách Bài tập tin học 11.
 Bài tập 4.53 trang 51 sách Bài tập tin học 11.
I. Bài tập 3.33:
1. Tìm hiểu đề bài:
 Dữ liệu vào: Tháng t.
 Dữ liệu ra: Vị trí của trạm sau t tháng.
2. Xây dựng ý tưởng giải thuật:
Các bước thực hiện:
 Bước 1: Nhập t.
 Bước 2: Khởi gán k= t Mod 4;
 Bước 3: Nếu k=1 thì tọa độ là (t+1,0). Qua bước 7.
 Bước 4: Nếu k=2 thì tọa độ là (0,t+1). Qua bước 7.
 Bước 5: Nếu k=3 thì tọa độ là (-t-1,0). Qua bước 7.
 Bước 6: Nếu k=2 thì tọa độ là (0,-t-1). Qua bước 7.
 Bước 7: Kết thúc thuật toán.
3. Trình bày lời giải:

4. Mở rộng bài toán:


II. Bài tập 5.8:
Kết qủa kiểm tra sức khoẻ học sinh được ghi trên phiếu có dạng :
Phiếu kiểm tra sức khoẻ
Lớp: ..................
Họ và tên:...........................................

- Trang 170 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Nam/nữ:...............................................
Chiều cao:............................................cm
Cân nặng:............................................kg
Lập từ ban phím tên lớp và số nguyên N - số học sinh trong lớp, sau đó nhập N phiếu
kiểm tra học sinh của lớp, với mỗi phiếu, chỉ cần nhập bốn trường cuối. Hãy:
a) Xác định kiểu dữ liệu và khai biến thích hợp.
b) Viết đoạn chương trình tính và đưa ra màn hình các thông tin sau:
 Chiều cao trung bình của tất cả học sinh, chiều cao trung bình của nam
vàchiều cao trung bình của nữ.
 Cân nặng trung bình trung bình của tất cả học sinh, cân nặng trung bình của
nam, cân nặng trung bình của nữ.
 Số học sinh cao hơn chiều cao trung bình của toàn lớp, số học sinh nam cao
hơn chiều cao trung bình của nam, số học sinh nữ cao hơn chiều cao trung bình
của nữ.
 Số học sinh nhẹ hơn mức trung bình của lớp, số học sinh nam nhẹ hơn mức
trung bình của nam, số học sinh nữ nhẹ hơn mức trung bình của nữ.
1. Tìm hiểu đề bài:
 Dữ liệu vào: Tên lớp, Số học sinh N; với mỗi học sinh có các thông tin sau: họ và
tên, giới tính, chiều cao, cân nặng.
 Dữ liệu ra: Gồm các thông tin:
 Chiều cao, cân nặng trung bình của nam, nữ và cả lớp.
 Số học sinh cao hơn chiều cao trung bình của lớp; số học sinh nam, nữ cao
hơn chiều cao trung bình của nam, nữ.
 Số học sinh nhẹ hơn mức trung bình của lớp; số học sinh nam, nữ nhẹ hơn
mức trung bình của nam, nữ.
2. Ý tưởng thuật toán:
 Ý tưởng: Nhập vào từ bàn phím tên lớp và số học sinh trong lớp. Dùng vòng lặp để
nhập dữ liệu cho các trường hovaten, chieucao, cannang, gioitinh.
3. Trình bày lời giải
USES crt;
TYPE hocsinh = Record
hovaten:String[30];
chieucao:Real;
cannang:Real;
lop:String[20];
gt, nam, nu:String[20];
End;
VAR hs:Array[1..200] Of hocsinh;
d1, d2, i, n:Integer;
cntb, t, d, cctb, cctbnam, cctbnu, sohscao, cntbnam, cntbnu:Real;
{------ Thu tuc nhap du lieu------}
Procedure nhap;
Begin
WriteLn('nhap n');

- Trang 171 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
ReadLn(n);
FOR i:=1 To n Do
Begin
WriteLn('Nhap lop');ReadLn(hs[i].lop);
WriteLn('Nhap ho va ten:');ReadLn(hs[i].hovaten);
WriteLn('Nhap gioi tinh');ReadLn(hs[i].gt);
WriteLn('Chieu cao:') ;ReadLn(hs[i].chieucao);
WriteLn('Can nang:');ReadLn(hs[i].cannang);
End;
End;
{-------- Thu tuc tinh toan theo yeu cau cua de bai --------------}
Procedure tinhtb;
End;
cctb:=0;
cctbnam:=0;
cctbnu:=0;
d1:=0;
d2:=0;
cntb:=0;
cntbnam:=0;
cntbnu:=0;
FOR i:=1 To n Do
Begin
cctb:=cctb+hs[i].chieucao;
cntb:=cntb+hs[i].cannang;
End;
cctb:=cctb/n;
cntb:=cntb/n;
FOR i:=1 To n Do
If (hs[i].gt='nam') Then
BEGIN
cctbnam:=cctbnam+hs[i].chieucao;
cntbnam:=cntbnam+hs[i].cannang;
d1:=d1+1;
END;
cctbnam:=cctbnam/d1;
cntbnam:=cntbnam/d1;
FOR i:=1 To n Do
If(hs[i].gt='nu') Then
BEGIN
cctbnu:=cctbnu+hs[i].chieucao;
cntbnu:=cntbnu+hs[i].cannang;
d2:=d2+1;
End;

- Trang 172 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
cctbnu:=cctbnu/d2;
cntbnu:=cntbnu/d2;
End;
{--------- Thu tuc dua ra ket qua theo yeu cau cua de bai---------}
Procedure KetQua;
Begin
tinhtb;
d:=0;t:=0;
FOR i:=1 To n Do
If (hs[i].chieucao>cctb) Then d:=d+1;
WriteLn('Chieu cao trung binh cua lop: ',cctb:2:2,'cm');
WriteLn('Chieu cao trung binh cua nam: ',cctbnam:2:2,'cm');
WriteLn('Chieu cao trung binh cua nu: ',cctbnu:2:2,'cm');
WriteLn('So hs co chieu cao cao hon chieu cao trung binh cua lop: ', d:0:0);
d1:=0;d2:=0;
FOR i:=1 To n Do
If(hs[i].gt='nam')And (hs[i].chieucao>cctbnam) Then d1:=d1+1;
WriteLn(' So hoc sinh nam cao hon chieu cao trung binh cua nam: ',d1);
FOR i:=1 To n Do
If (hs[i].gt='nu')And (hs[i].chieucao>cctbnu) Then d2:=d2+1;
WriteLn(' So hoc sinh nu cao hon chieu cao trung binh cua nu:',d2);
d:=0;t:=0;
FOR i:=1 To n Do
If (hs[i].cannang<cntb) Then d:=d+1;
WriteLn('Can nang trung binh cua lop: ',cntb:2:2,'cm');
WriteLn('Can nang trung binh cua nam: ',cntbnam:2:2,'cm');
WriteLn('Can nang trung binh cua nu: ',cntbnu:2:2,'cm');
WriteLn('So hoc sinh co can nang nhe hon muc trung binh cua lop: ', d:0:0);
d1:=0;d2:=0;
FOR i:=1 To n Do
If(hs[i].gt='nam')And (hs[i].cannang<cntbnam) Then d1:=d1+1;
WriteLn(' So hoc sinh nam nhe hon can nang trung binh cua nam: ',d1);
FOR i:=1 To n Do
If (hs[i].gt='nu')And (hs[i].cannang<cntbnu) Then d2:=d2+1;
WriteLn(' So hoc sinh nu nhe hon can nang trung binh cua nu:',d2);
End;
{----------- Chuong trinh chinh-----------------}
BEGIN
clrscr;
nhap;
KetQua;
ReadLn;
END.

- Trang 173 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

Sinh viên: Nguyễn Văn Huy


Lớp: Tin 4B
Phương pháp giải bài tập Tin học
 Bài tập 3.35 trang 24 sách Bài tập tin học 11.
 Bài tập 5.8 trang 59 sách Bài tập tin học 11.
I. Bài tập 3.34:
1. Tìm hiểu đề bài:
 Dữ liệu vào: Số a, b, N
 Dữ liệu ra: Giá trị MinF và MaxF của hai hàm số:
2. Xây dựng ý tưởng giải thuật:
 Sơ đồ khối
của thuật toán:

- Trang 174 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

- Trang 175 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
3. Trình bày lời giải:

4. Mở rộng bài toán:

- Trang 176 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
II. Bài tập 5.8:
1. Tìm hiểu đề bài:
 Dữ liệu vào: Tệp SoLieu.INP gồm các thông tin:
 Dòng 1: Ba số thực u, v, r;
 Các dòng sau: Mỗi dòng gồm hai số thực x,y.
 Dữ liệu ra: Số điểm thuộc đường tròn R(u,v).
2. Xây dựng ý tưởng giải thuật:.
 Sơ đồ thuật toán:

3. Trình bày lời giải:

- Trang 177 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
4. Nghiên cứu lời giải và mở rộng bài toán:
 Bộ test:

Kết quả 14 điểm thuộc đường tròn.


 In ra tọa độ các điểm nằm trong đường tròn.

- Trang 178 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

Họ tên : Phạm Văn Quân


Lớp : tin 4b
Bài 4.11
1. Mô tả bài toán
- cho 2 dãy số nguyên U=(u1,…,un) và V=(v1,…,vn) các phần tử của dãy đã được sắp xếp
theo thứ tự tăng dần , mỗi phần tử có giá trị không vượt quá 32000 .Từ đó sắp xếp 2 dãy đó
thành 1 dãy R=(r1,…,r2n)

U=(2,4,8)

với dữ liệu vào(m=3) R(2,3,4,5,6,8)

V=(3,5,6)

2. ý tưỏng giải thuật


inphut : + nhập 2 mảng u,v không giảm
+ với mỗi phần tử (u1,…,un and v1,..,vn)<=32000
Output : hòa nhập 2 mảng u,v thành mảng R không giảm

+ sơ đồ khối
nhập 2mảng
u,v

i:=1;j:=1,k:=1,u[n+1]:=32001,v[
n+1]:=32001

T
u[j]<v[k]

r[i]:=v[k]
r[i]:=u[j]
inc(k)
inc(j)

Ket thuc
r[i] - Trang 179 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

Chương trình bài toán :


uses crt;
var u,v,r :array[1..100] of integer;
k,i,j,n :byte;
begin
clrscr;
writeln('ban nhap bao nhieu phan tu');
readln(n);
writeln('phan tu nhap la day khong giam');
for i:=1 to n do
begin
writeln('u[',i,']=');
readln(u[i]);
end;
for i:=1 to n do
begin
writeln('v[',i,']=');
readln(v[i]);
end;
j:=1;k:=1;i:=1;
u[n+1]:=32001;
v[n+1]:=32001;
while (j<=n) or (k<=n)do
if u[j]<v[k] then
begin
r[i]:=u[j];
inc(j); inc(i);
end
else
begin
r[i]:=v[k];
inc(k);inc(i);
end;
writeln('mang sau khi hoa nhap:');
for i:=1 to 2*n do
write(' ',r[i]);
readln;
end.
Bài 6.15
1. mô tả bài toán
cho 2 đoạn thẳng AB và CD trong mặt phẳng có các tọa độ tương ứng
dùng hàm kiểm tra coi 2 đoạn thẳng có cắt nhau hay không.

- Trang 180 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
2. ý tưởng thuật toán
+ input : nhập tọa độ các điểm a,b,c,d
+ output : kiểm tra coi 2 đườnd thẳng tạo bởi 4 điểm có cắt nhau không

Chưong trình bài toán


var xa,xb,xc,xd,ya,yb,yc,yd :real;
function giaihpt(a1,b1,c1,a2,b2,c2:real):boolean;
var d,dx,dy:real;
begin
d:=a1*b2-a2*b1;
dx:=c1*b2-c2*b1;
dy:=a1*c2-a2*c1;
if d<>0 then
giaihpt:=true
else
giaihpt:=false;
end;

begin
writeln('nhap gia tri xa=');readln(xa);
writeln('nhap gia tri xb=');readln(xb);
writeln('nhap gia tri xc=');readln(xc);
writeln('nhap gia tri xd=');readln(xd);
writeln('nhap gia tri ya=');readln(ya);
writeln('nhap gia tri yb=');readln(yb);
writeln('nhap gia tri yc=');readln(yc);
writeln('nhap gia tri yd=');readln(yd);
if giaihpt((yb-ya),xa-xb,-xa,yd-yc,xc-xd,-yc) then
write(' hai duong thang cat nhau')
Else write(' hai duong khong cat nhau');
readln;
End.

- Trang 181 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

BÀI TẬP MÔN PHƯƠNG PHÁP DẠY HỌC GIẢI BT THPT


Họ và tên: Lê Hữu Trọng
Lớp: Tin 4B

I. Bài tập 4.29 – Sách BT Tin Học 11:


Đề ra: Xét ngôn ngữ khởi tạo hằng nguyên bao gồm 4 câu lệnh:
PLUS1 Khởi tạo hằng +1;
MINUS1 Khởi tạo hằng -1;
INC Tăng hằng nhận được lên 1;
DUP Nhân đôi hằng nhận được.
Hãy viết chương trình:
● Nhập vào từ bàn phím số nguyên N. Tạo ra dãy các câu lệnh cho kết quả thực hiện
là số nguyên N (|N| 2*109).
● Đưa ra màn hình dãy câu lệnh của ngôn ngữ tạo hằng, mỗi câu lệnh trên một hàng.
Ví dụ: Nếu dữ liệu vào là 3, kết quả đưa ra màn hình sẽ là:
PLUS1
DUP
INC
Bài giải:
1. Phân tích bài toán:
● Input:
▪ Cho ngôn ngữ khởi tạo hằng nguyên:
PLUS1 Khởi tạo hằng +1;
MINUS1 Khởi tạo hằng -1;
INC Tăng hằng nhận được lên 1;
DUP Nhân đôi hằng nhận được.
▪ N, (|N| 2*109).
● Output: Dãy các câu lệnh của ngôn ngữ trên để tạo ra N.
2. Xây dựng ý tưởng giải thuật:
Ta chia bài toán thành ba trường hợp:
● Nếu N = 0: Không có câu lệnh nào của ngôn ngữ được thực hiện
● Nếu N > 0: Ban đầu ta khởi tạo hằng +1, sau đó ta nhân đôi hằng nhận được cho đến
khi hằng đạt giá trị lớn nhất và chưa vượt quá N, tiếp theo ta tăng hằng lên 1 cho đến khi
hằng nhận được bằng N.
● Nếu N < 0: Ban đầu ta khởi tạo hằng -1, sau đó ta nhân đôi hằng nhận được cho đến
khi hằng đạt giá trị lớn nhất và không vượt quá N, tiếp theo ta tăng hằng lên 1 cho đến khi
hằng nhận được bằng N.
Thuật toán:
● Bước 1: Nhập N;
● Bước 2: Nếu N = 0:
▪ Thông báo “Dãy câu lệnh bằng rỗng”;

- Trang 182 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
▪ Chuyển sang bước 7;
● Bước 3:
▪ Nếu N > 0:
◦ In “PLUS1”;
◦ S := 1;
▪ Ngược lại:
◦ In “MINUS1”;
◦ S := -1;
● Bước 4: Nếu |S*2| <= |N|:
▪ In “DUP”;
▪ S := S*2;
▪ Quay lại bước 4;
● Bươc 5: Nếu S < 0:
▪ In “DUP”;
▪ S := S*2;
● Bước 6: Nếu S + 1 < N:
▪ In “INC”;
▪ S := S + 1;
▪ Quay lại bước 6;
● Bước 7: Dừng thuật toán.
3. Chương trình:
● Chương trình Pascal:
Uses Crt;
Var N, S: Longint;
Begin
Write('Nhap N = ');
Readln(N);
If N = 0 Then
Writeln('Khong su dung cau lenh nao cua ngon ngu.');
Exit;
End;
IF N > 0 Then
Begin
Writeln('PLUS1');
S := 1;
End
Else
Begin
Writeln('MINUS1');
S := -1;
End;
While Abs(S*2) <= Abs(N) Do
Begin
Writeln('DUP');

- Trang 183 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
S := S*2;
End;
If S < 0 Then
Begin
Writeln('DUP');
S := S*2;
End;
While S + 1 <= N Do
Begin
Writeln('INC');
S := S + 1;
End;
Readln
End.
● Chương trình C++:
#include<conio.h>
#include<stdio.h>
#include<math.h>
int N, S;
int main()
{
printf("Nhap N = ");
scanf("%d",&N);
if(N==0)
{
printf("Khong su dung cau lenh nao cua ngon ngu");
return 0;
}
if(N>0)
{
printf("PLUS1\n");
S=1;
}
else
{
printf("MINUS1\n");
S=-1;
}
while(abs(S*2)<=abs(N))
{
printf("DUP\n");
S*=2;
}
if(S<0)

- Trang 184 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
{
printf("DUP\n");
S*=2;
}
while((S+1)<=N)
{
printf("INC\n");
S++;
}
getch();
return 0;
}
4. Nghiên cứu về lời giải:
● Test:
▪ N = 19:
In PLUS1 DUP DUP DUP DUP INC INC INC
S 1 2 4 8 16 17 18 19
In MINUS1 DUP DUP DUP DUP INC INC INC INC
S -1 -2 -4 -8 -16 -15 -14 -13 -12
▪ N = -12
● Mở rộng thuật toán:
Nhận xét: Trong nhiều trường hợp, số câu lệnh của ngôn ngữ cần thực hiện khi ta sử
dụng thuật toán trên không được tối ưu cho lắm. Ví dụ khi ta nhập N = 31, áp dụng thuật
toán trên ta cần sử dụng 1 câu lệnh PLUS1, 4 câu lệnh DUP và 15 câu lệnh INC. Trong khi
nếu ta sử dụng các câu lệnh INC và DUP xen kẽ thì số câu lệnh giảm đi rất đáng kể. Ví dụ
với N = 31, ban đầu ta sử dụng một câu lệnh PLUS1, tiếp theo là: 1 câu lệnh DUP, 1 câu
lệnh INC, 1 câu lệnh DUP, 1 câu lệnh INC, 1 câu lệnh DUP, 1 câu lệnh INC, 1 câu lệnh
DUP, 1 câu lệnh INC. Khi đó số câu lệnh giảm đi là (1 + 4 +15) – (1 + 4*2) = 11 câu lệnh.
=> Cải tiến thuật toán: Vấn đề đặt ra là tạo ra dãy các câu lệnh cho kết quả thực hiện là
số nguyên N và số các câu lệnh sử dụng là ít nhất? Thuật toán sau dựa trên cách biểu diễn
nhị phân của |N|:
▪ Bước 1: Nhập N;
▪ Bước 2: Nếu N = 0:
◦ Thông báo “Dãy câu lệnh bằng rỗng”;
◦ Chuyển sang bước 7;
▪ Bước 3: i := 0;
▪ Bước 4: Nếu |N| > 1:
◦ Nếu |N mod 2| = 1:
▫ i := i + 1;
▫ A[i] := ‘INC’;
◦ i := i +1;
◦ A[i] := ‘DUP’;
◦ Nếu N > 0: N := N div 2;
Ngược lại: N := (N + (N mod 2)) div 2;

- Trang 185 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
◦ Quay lại bước 4;
▪ Bước 5:
◦ i := i + 1;
◦ Nếu N > 0: A[i] := ‘PLUS1’;
Ngược lại: A[i] := ‘MINUS1’;
▪ Bước 6: In ngược mảng A từ phần tử i đến 1;
▪ Bước 7: Dừng thuật toán.
Chương trình Pascal:
Uses Crt;
Type St = String[6];
Var N, i, j: Longint;
A: Array[1..1000] Of St;
Begin
Clrscr;
Write('Nhap N = ');
Readln(N);
If N = 0 Then
Begin
Writeln('Khong su dung cau lenh nao cua ngon ngu.');
Exit;
End;
i := 0;
While Abs(N) > 1 Do
Begin
If Abs(N mod 2) = 1 Then
Begin
Inc(i);
A[i] := 'INC';
End;
Inc(i);
A[i] := 'DUP';
If N > 0 Then
N := N div 2
Else
N := (N + (N mod 2)) div 2;
End;
Inc(i);
If N > 0 Then
A[i] := 'PLUS1'
Else
A[i] := 'MINUS1';
For j := i downto 1 do
Writeln(A[j]);
Readln

- Trang 186 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
End.
Chương trình C++:
#include<conio.h>
#include<stdio.h>
#include<math.h>
#include<string.h>
char A[100][7];
int N, i, j;
int main()
{
printf("Nhap N = ");
scanf("%d",&N);
if(N==0)
{
printf("Khong su dung cau lenh nao cua ngon ngu.");
return 0;
}
i=-1;
while(abs(N)>1)
{
if(abs(N%2)==1)
{
i++;
strcpy(A[i],"INC");
}
i++;
strcpy(A[i],"DUP");
if(N>0)
N=N/2;
else
N=(N+(N%2))/2;
}
if(N>0)
strcpy(A[i+1],"PLUS1");
else
strcpy(A[i+1],"MINUS1");
for(j=i+1;j>=0;j--)
printf("%s\n",A[j]);
getch(); N |N mod 2| I A[i]
return 0; 1 INC
} ▪ N -19 1
2 DUP
= -19:
-10 0 3 DUP
Với thuật toán này, giả sử:
4 INC
▪ N = 19: -5 1
5 DUP
6 INC
-3 1
- Trang 187 - 7 DUP
-2 0 8 DUP
-1 9 MINUS1
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
N |N mod 2| I A[i]
1 INC
19 1
2 DUP
3 INC
9 1
4 DUP
4 0 5 DUP
2 0 6 DUP
1 7 PLUS1
● Xây dựng lớp bài toán tương đương:
▪ Xét ngôn ngữ khởi tạo hằng nguyên bao gồm 4 câu lệnh:
PLUS1 Khởi tạo hằng +1;
INC Tăng hằng nhận được lên 1;
DEC Giảm hằng nhận được đi 1;
DUP Nhân đôi hằng nhận được.
Hãy viết chương trình:
◦ Nhập vào từ bàn phím số nguyên N. Tạo ra dãy các câu lệnh cho kết quả thực
hiện là số nguyên N (|N| 2*109).
◦ Đưa ra màn hình dãy câu lệnh của ngôn ngữ tạo hằng, mỗi câu lệnh trên một
hàng.
Ví dụ: Nếu dữ liệu vào là 3, kết quả đưa ra màn hình sẽ là:
PLUS1
DUP
INC
▪ Xét ngôn ngữ khởi tạo hằng nguyên bao gồm 4 câu lệnh:
PLUS1 Khởi tạo hằng +1;
MINUS1 Khởi tạo hằng -1;
INC Tăng hằng nhận được lên 1;
DUPK Nhân hằng nhận được với số K.
Hãy viết chương trình:
◦ Nhập vào từ bàn phím 2 số nguyên N và K. Tạo ra dãy các câu lệnh cho kết quả
thực hiện là số nguyên N (|N| 2*109,2 |K| 100).
◦ Đưa ra màn hình dãy câu lệnh của ngôn ngữ tạo hằng, mỗi câu lệnh trên một
hàng.
Ví dụ: Nếu dữ liệu vào là N = 3,k = 2 kết quả đưa ra màn hình sẽ là:
PLUS1
DUPK
INC
II. Bài tập 7.16 – Sách BT Tin Học 11:
Đề ra: Hãy viết chương trình cho phép nhập vào số thập phân nguyên dương N (N
2.109). In ra số N sau khi đã đổi N ra số thập lục phân.
Bài giải:
1. Phân tích bài toán:
● Input: N(10), N Z+

- Trang 188 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
● Output: N(16)
● Cơ sở lý thuyết:
▪ Số thập lục phân N(16) = a1..an với ai {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F},
i = . (a1a2..an)(16) =( )(10)=(a1.16n-1+a2.16n-2 +.. +an-1.16+an)(10), trong đó ở vế
phải: ai =

2. Xây dựng ý tưởng giải thuật:


● Để đổi một số thập phân N ra số thập lục phân ta thực hiện như sau:

N 16
Dư a1 Thương 16
Dư a2 Thương
................
Thương 16
Dư an 0 => N(16) = an..a2a1

● Trước hết ta thấy cần lưu số thập lục phân này bằng một xâu ký tự (hoặc có thể là một
mảng) trong đó mỗi phần tử là một chữ số trong số thập lục phân đó.
● Từ cách đổi số N(10) sang N(16) và cách lưu trữ kết quả ở trên, ta có thuật toán được
trình bày cụ thể như sau:
▪ Bước 1: Nhập N(10), N Z+;
▪ Bước 2: Nếu n = 0 thì s := ’0’
Ngược lại: s := ‘’;
▪ Bước 3: Nếu n > 0 thì:
◦ Đổi số (n mod 16) ra xâu và đưa vào biến ch như sau:
▫ Nếu (n mod 16) = 10 thì ch := ’A’;
▫ Nếu (n mod 16) = 11 thì ch := ’B’;
▫ Nếu (n mod 16) = 12 thì ch := ’C’;
▫ Nếu (n mod 16) = 13 thì ch := ’D’;
▫ Nếu (n mod 16) = 14 thì ch := ’E’;
▫ Nếu (n mod 16) = 15 thì ch := ’F’;
▫ Nếu (n mod 16) < 10 thì chr(n mod 16 ,ch);
◦ s := ch + s;
◦ n := n div 2;
◦ Quay lại bước 3;
▪ Bước 4: In s rồi kết thúc.
3. Chương trình:
● Chương trình Pascal:
Uses Crt;
Var N:Longint;
S,ch:String[30];
Begin
Clrscr;

- Trang 189 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Write('Nhap so thap phan N = ');
Readln(N);
If N = 0 Then
S := '0'
Else
S := '';
While N > 0 Do
Begin
Case (N mod 16) of
10:ch:='A';
11:ch:='B';
12:ch:='C';
13:ch:='D';
14:ch:='E';
15:ch:='F';
Else
Str(N mod 16,ch);
End;
S := ch + S;
N := N div 16;
End;
Writeln(‘N(16)= ',s);
Readln
End.
● Chương trình C++:
#include<conio.h>
#include<stdio.h>
#include<string.h>
char s[100],p[100];
int n;
void ccc(char c[])
{
strcpy(p,s);
strcpy(s,c);
strcat(s,p);
}
char *doi(long n)
{
strcpy(s,"");
for(;;)
{
switch (n%16)
{
case 0:ccc("0");break;

- Trang 190 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
case 1:ccc("1");break;
case 2:ccc("2");break;
case 3:ccc("3");break;
case 4:ccc("4");break;
case 5:ccc("5");break;
case 6:ccc("6");break;
case 7:ccc("7");break;
case 8:ccc("8");break;
case 9:ccc("9");break;
case 10:ccc("A");break;
case 11:ccc("B");break;
case 12:ccc("C");break;
case 13:ccc("D");break;
case 14:ccc("E");break;
case 15:ccc("F");break;
}
n/=16;
if(n==0) break;
}
return s;
}
int main()
{ printf("Nhap so thap phan n = ");
scanf("%d",&n);
strcpy(s,doi(n));
printf("N(16) = %s",s);
getch();
return 0;
}
4. Nghiên cứu về lời giải:
● Test: Giả sử ta nhập vào N = 456789. Do
N > 0 nên ban đầu S = ‘’, quá trình thực hiện
chương trình tiếp theo có thể được minh họa
bằng bảng bên. Vậy, 456789(10) = 6F855(16)
● Nghiên cứu mở rộng giải thuật:
▪ Ta thấy, số thập lục phân khi đổi ra số
nhị phân là một số nhị phân 4 bit. Ví dụ ta có số
nhị phân N(2) = 1 1000 1101, để đổi số này ra số thập lục phân, ta phân N (2)
3 thành phần. Từ bảng bên ta có: Thành phần thứ nhất là 1 (2) = 0001(2) =
1(16), thành phần thứ hai 1000(2) = 8(16) và thành phần thứ ba 1101(2) = D(16)
=> N(2) = 18D(16). Vậy để đổi một số nhị phân ra số thập lục phân ta lấy từ
phải sang trái số nhị phân 4 bit của số nhị phân tương ứng với một số thập
lục phân như ở bảng bên sau đó ghép lại từ phải sang trái ta được số thập

- Trang 191 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
lục phân, nếu số bit của số nhị phân cuối cùng không đủ 4 bit thì ta thêm các bit sô 0 vào đầu
số nhị phân đó
▪ Nhận xét: Từ đó ta thấy rằng có thể đổi một số N (10) sang N(16) bằng cách đổi N(10)
sang N(2), rồi từ N(2) đổi sang N(16) theo quy tắc ở tên.
▪ Thuật toán được cài đặt bằng ngôn ngữ lập trình Pascal như sau:
Uses Crt;
Label Nhan;
Var N:Longint;
S,t:String[30];
Begin
Clrscr;
Write('Nhap so thap phan N = ');
Readln(N);
If N = 0 Then
t := '0000'
Else
t := '';
While N > 0 Do
Begin
If n mod 2 = 0 Then
t := '0' + t
Else
t := '1' + t;
N:=N div 2;
End;
While Length(t) mod 4 <> 0 Do
t := '0' + t;
S:='';
While t <> '' Do
Begin
If copy(t,1,4)='0000' Then
Begin
S := S +'0';
Goto Nhan;
End;
If copy(t,1,4)='0001' Then
Begin
S := S +'0';
Goto Nhan;
End;
If copy(t,1,4)='0010' Then
Begin
S := S +'2';
Goto Nhan;

- Trang 192 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
End;
If copy(t,1,4)='0011' Then
Begin
S := S +'3';
Goto Nhan;
End;
If copy(t,1,4)='0100' Then
Begin
S := S +'4';
Goto Nhan;
End;
If copy(t,1,4)='0101' Then
Begin
S := S +'5';
Goto Nhan;
End;
If copy(t,1,4)='0110' Then
Begin
S := S +'6';
Goto Nhan;
End;
If copy(t,1,4)='0111' Then
Begin
S := S +'7';
Goto Nhan;
End;
If copy(t,1,4)='1000' Then
Begin
S := S +'8';
Goto Nhan;
End;
If copy(t,1,4)='1001' Then
Begin
S := S +'9';
Goto Nhan;
End;
If copy(t,1,4)='1010' Then
Begin
S := S +'A';
Goto Nhan;
End;
If copy(t,1,4)='1011' Then
Begin
S := S +'B';

- Trang 193 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Goto Nhan;
End;
If copy(t,1,4)='1100' Then
Begin
S := S +'C';
Goto Nhan;
End;
If copy(t,1,4)='1101' Then
Begin
S := S +'D';
Goto Nhan;
End;
If copy(t,1,4)='1110' Then
Begin
S := S +'E';
Goto Nhan;
End;
If copy(t,1,4)='1111' Then
Begin
S := S +'F';
Goto Nhan;
End;
Nhan:Delete(t,1,4);
End;
Writeln('N(16) = ',S);
Readln
End.
Nhận xét: Ta thấy hai thuật toán ở trên cài đặt khá phức tạp. Để khắc phục nhược điểm
đó ta có thể cải tiến thuật toán thứ nhất bằng cách khởi tạo SH = ‘0123456789ABCDEF’,
kết quả của N(16) lưu vào mảng A được xác định như sau:
▪ i := 0;
▪ While N > 0 Do
◦ i := i + 1;
◦ A[i] := SH[( N mod 16)+1];
◦ N := N div 16;
Sau đó ta in ngược mảng A se cho kết quả N(16). Thuật toán được cài đặt bằng ngôn ngữ lập
trình Pascal như sau:
Uses Crt;
Var A: Array[1..100] of Char;
n: Longint;
i, j: Integer;
SH: String[16];
Begin
Clrscr;

- Trang 194 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
Write('Nhap so thap phan N = ');
Readln(N);
i := 0;
SH := '0123456789ABCDEF';
While N > 0 Do
Begin
Inc(i);
A[i] := SH[(N mod 16) +1];
N := N div 16;
End;
Write('N(16) = ');
For j := i downto 1 do
Write(A[j]);
Readln
End.
Chương trình C++:
#include<conio.h>
#include<stdio.h>
#include<string.h>
char Tam[100],A[100],SH[100];
long N;
int i;
int main()
{
printf("Nhap so thap phan N = ");
scanf("%d",&N);
i=-1;
strcpy(SH,"0123456789ABCDEF");
while(N>0)
{
i++;
Tam[i]=SH[(N%16)];
N=N/16;
}
Tam[i+1]='\0';
for(i=0;i<strlen(Tam);i++)
A[i]=Tam[strlen(Tam)-i-1];
A[i+1]='\0';
printf("N(16) = ");
printf("%s",A);
getch();
return 0;
}
● Xây dựng lớp bài toán tương đương:

- Trang 195 -
Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com Lớp 11
Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com
▪ Hãy viết chương trình cho phép nhập vào số thập phân nguyên dương N (N
2.10 ). In ra số N sau khi đã đổi N ra số bát phân.
9

▪ Hãy viết chương trình cho phép nhập vào số thập phân nguyên dương N (N
2.10 ). In ra số N sau khi đã đổi N ra số nhị phân.
9

▪ Hãy viết chương trình cho phép nhập vào số thập lục phân. In ra số N sau khi đã
đổi N ra số thập phân.
▪ Hãy viết chương trình cho phép nhập vào số nhị phân. In ra số N sau khi đã đổi N
ra số thập phân.

- Trang 196 -

You might also like