1. Trang chủ
  2. » Công Nghệ Thông Tin

Lý thuyết và bài tập lập trình pascal bậc THPT

82 4,4K 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 82
Dung lượng 1,68 MB
File đính kèm 10_TongHop_THPT_Version 1.1.zip (1 MB)

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Giáo trình tóm tắt kiến thức lập trình pascal từ cơ bản đến nâng cao. Đặc biệt giáo trình cung cấp đầy đủ và phong phú các dạng bài tập thực hành rất thực tế. Đây là tài liệu giúp giáo viên bồi dưỡng học sinh giỏi lập trình pascal trong các trường THPT. Rất hữu ích cho giáo viên và học sinh.

Trang 1

N K T H

Mục lục

Chuyên đề 1 NGÔN NGỮ LẬP TRÌNH 4

I TÓM TẮT LÝ THUYẾT 4

1 Khái niệm 4

2 Mô tả thuật thoán 4

3 Sử dụng Free Pascal 4

4 Các bước cơ bản khi lập một chương trình bằng Pascal 5

5 Các thành phần cơ bản của ngôn ngữ Pascal 5

II VÍ DỤ 5

III BÀI TẬP 5

Chuyên đề 2 CẤU TRÚC CHƯƠNG TRÌNH 7

I TÓM TẮT LÝ THUYẾT 7

1 Cấu trúc của một chương trình 7

2 Khai báo hằng 7

3 Khai báo biến 7

4 Các kiểu dữ liệu cơ bản 7

5 Biểu thức 8

6 Câu lệnh cơ bản 9

7 Nhập xuất từ tệp 9

II VÍ DỤ 10

III BÀI TẬP 12

IV HƯỚNG DẪN 14

Chuyên đề 3 CẤU TRÚC RẼ NHÁNH 15

I TÓM TẮT LÝ THUYẾT 15

1 Lệnh IF 15

2 Lệnh CASE 15

II VÍ DỤ 16

III BÀI TẬP 16

IV HƯỚNG DẪN 18

Chuyên đề 4 CẤU TRÚC LẶP 19

I TÓM TẮT LÝ THUYẾT 19

1 Vòng lặp xác định 19

2 Vòng lặp không xác định 19

II VÍ DỤ 20

III BÀI TẬP 24

IV HƯỚNG DẪN 26

Chuyên đề 5 MẢNG MỘT CHIỀU 27

I TÓM TẮT LÝ THUYẾT 27

1 Khái niệm 27

Trang 2

2 Khai báo 27

3 Truy xuất phần tử 27

4 Số ngẫu nhiên 27

II VÍ DỤ 28

III BÀI TẬP 32

IV HƯỚNG DẪN GIẢI 39

Chuyên đề 6 MẢNG HAI CHIỀU 42

I TÓM TẮT LÝ THUYẾT 42

1 Khái niệm 42

2 Khai báo 42

3 Truy xuất phần tử 42

II VÍ DỤ 43

III BÀI TẬP 47

IV HƯỚNG DẪN GIẢI 53

Chuyên đề 7 XÂU KÍ TỰ 56

I TÓM TẮT LÝ THUYẾT 56

1 Khái niệm 56

2 Khai báo 56

3 Phép toán trên xâu 56

4 Hàm và thủ tục 57

5 Kiểu kí tự Char 57

II VÍ DỤ 57

III BÀI TẬP 61

IV HƯỚNG DẪN 64

Chuyên đề 8 KIỂU BẢN GHI 67

I TÓM TẮT LÝ THUYẾT 67

1 Khái niệm 67

2 Khai báo – Sử dụng biến kiểu bản ghi 67

II VÍ DỤ 68

III BÀI TẬP 69

Chuyên đề 9 CHƯƠNG TRÌNH CON 71

I TÓM TẮT LÝ THUYẾT 71

1 Khái niệm 71

2 Hàm – Thủ tục 72

3 Tham số trong chương trình con: 73

4 Đệ quy 74

II VÍ DỤ 75

III BÀI TẬP 77

Chuyên đề 10 THƯ VIỆN 79

I TÓM TẮT LÝ THUYẾT 79

Trang 3

N K T H

1 Khái niệm 79

2 Unit Crt 79

3 Unit Graph 80

II VÍ DỤ 81

III BÀI TẬP 82

Trang 4

1.1 Bài toán (problem)

Trong toán học: Là vấn đề ta muốn giải quyết

Trong tin học: Là vấn đề ta muốn máy tính giải quyết.

1.2 Đầu vào – đầu ra

Đầu vào của bài toán (Input): dữ liệu cần cung cấp cho máy tính

Đầu ra của bài toán (Output): là kết quả máy tính thực hiện được.

1.3 Thuật toán

Thuật toán: là một dãy các bước hữu hạn sao cho khi máy tính thực hiện tuần

tự các bước đó thì từ input ta tìm được output của bài toán

2 Mô tả thuật thoán

Có 3 cách để mô tả thuật toán:

Liệt kê : sử dụng ngôn ngữ tự nhiên để mô tả

Turbo Pascal, Free Pascal: là môi trường để lập trình bằng NNLT Pascal, hỗ

trợ soạn thảo, biên dịch, thông dịch chương trình

Trang 5

N K T H

Download bản cài trên Windows:

http://freepascal.org/down/i386/win32.var

B1: Chạy chương trình Free Pascal:

\FPC\2.0.4\bin\i386-win32\fp.exe (2,199KB)

B2: Mở cửa sổ soạn thảo mới: File  New

B3: Soạn thảo chương trình

B4: lưu lại chương trình FILE  SAVE AS

B5: chạy thử chương trình RUN  RUN (CTRL + F9)

4 Các bước cơ bản khi lập một chương trình bằng

Pascal

Bước 1: Soạn thảo chương trình.

Bước 2: Dịch chương trình (nhấn phím F9), nếu có lỗi thì phải sửa lỗi.

Bước 3: Chạy chương trình (nhấn phím Ctrl-F9).

5 Các thành phần cơ bản của ngôn ngữ Pascal

1 Khởi động Turbo Pascal

2 Nhập vào đoạn chương trình sau:

Uses Crt;

Begin

Writeln(‘***********************************************************’); Writeln(‘* CHUONG TRINH PASCAL DAU TIEN CUA TOI *’); Writeln(‘* Oi! Tuyet voi! *); Writeln(‘***********************************************************’);

Trang 6

Readln;

End.

3 Dịch và chạy chương trình trên

4 Lưu chương trình vào đĩa với tên BAI1.PAS

5 Thoát khỏi Pascal

6 Khởi động lại Turbo Pascal

7 Mở file BAI1.PAS

8 Chèn thêm vào dòng: CLRSCR; vào sau dòng BEGIN

9 Dịch và chạy thử chương trình

10 Lưu chương trình vào đĩa

11 Thoát khỏi Pascal

Bài 2 Xuất hình

In ra màn hình những hình sau đây

*

***

*****

*******

* * * * * * * * * *

* * * * * * * * * *

* * * * * * * * * *

* * * * * * * * * *

* *

* * * * * * * * * * * * * * *

******* Bài 3 Xuất chữ Viết chương trình in ra màn hình các hình sau: * ******** *******

*** ** ** ** **

** ** ** ** **

** ** ******** * *

********* ** ** **

** ** ** ** ** **

** ** ******** ********

Trang 7

N K T H

Chuyên đề 2 CẤU TRÚC CHƯƠNG TRÌNH

I TÓM TẮT LÝ THUYẾT

1 Cấu trúc của một chương trình

{ Phần tiêu đề }

PROGRAM Tên_chương_trình;

{ Phần khai báo }

USES ;

CONST .;

TYPE ;

VAR .;

PROCEDURE .;

FUNCTION ;

{ Phần thân chương trình } BEGIN

END.

2 Khai báo hằng

Hằng là một đại lượng có giá trị không thay đổi trong suốt quá trình thực hiện của chương trình chứa nó

Cú pháp:

CONST <Tên hằng> = <Giá trị>;

hoặc:

CONST <Tên hằng>:= <Biểu thức hằng>;

3 Khai báo biến

Biến là một đại lượng mà giá trị của nó có thể thay đổi trong quá trình thực hiện chương trình

Cú pháp:

VAR <Tên biến>[,<Tên biến 2>, ] : <Kiểu dữ liệu>;

4 Các kiểu dữ liệu cơ bản

4.1 Kiểu logic

- Từ khóa: BOOLEAN

- Miền giá trị: (TRUE, FALSE)

- Các phép toán: phép so sánh (=, <, >) và các phép toán logic: AND, OR, XOR, NOT.

4.2 Kiểu số nguyên

a Các kiểu số nguyên

Trang 8

+, -, *, / (phép chia cho ra kết quả là số thực).

Phép chia lấy phần nguyên: DIV (Ví dụ : 34 DIV 5 = 6).

Phép chia lấy số dư: MOD (Ví dụ: 34 MOD 5 = 4).

4.3 Kiểu số thực

Các kiểu số thực:

Single 1.5×10-45 → 3.4×10+38 4 byteReal 2.9×10-39 → 1.7×10+38 6 byteDouble 5.0×10-324 → 1.7×10+308 8 byteExtended 3.4×10-4932 → 1.1×10+4932 10 byte

Các phép toán trên kiểu số thực: +, -, *, /

Chú ý: Trên kiểu số thực không tồn tại các phép toán DIV và MOD.

Một số hàm số học thông dụng

SQRT(x): Trả về căn bậc hai của x (x≥0)

SIN(x): Trả về sin(x) theo radian

COS(x): Trả về cos(x) theo radian

EXP(x): Trả về ex

TRUNC(x): Trả về số nguyên gần với x nhất nhưng bé hơn x

ROUND(x): Làm tròn số nguyên x

INC(n): Tăng n thêm 1 đơn vị (n:=n+1)

DEC(n): Giảm n đi 1 đơn vị (n:=n-1)

5 Biểu thức

Biểu thức (expression) là công thức tính toán mà trong đó bao gồm các phép toán, các hằng, các biến, các hàm và các dấu ngoặc đơn

Ví dụ: (x +sin(y))/(5-2*x) biểu thức số học

(x+4)*2 = (8+y) biểu thức logic

Trong một biểu thức, thứ tự ưu tiên của các phép toán được liệt kê theo thứ tự sau:

1 Lời gọi hàm

2 Dấu ngoặc ()

3 Phép toán một ngôi (NOT, -)

Trang 9

N K T H

4 Phép toán *, /, DIV, MOD, AND

5 Phép toán +, -, OR, XOR

6 Phép toán so sánh =, <, >, <=, >=, <>, IN

6 Câu lệnh cơ bản

6.1 Câu lệnh gán

<Tên biến>:=<Biểu thức>;

6.2 Câu lệnh xuất dữ liệu

Để xuất dữ liệu ra màn hình, ta sử dụng ba dạng sau:

- Viết không qui cách: dữ liệu xuất ra sẽ được canh lề ở phía bên trái Nếu dữ

liệu là số thực thì sẽ được in ra dưới dạng biểu diễn khoa học

Hello Hello 500

500 1.2345700000E+02 123.46

Trang 10

Ngoài cách “đọc từng giá trị”, ta có thể “đọc từng dòng trong tệp” bằng thủ tục

Cú pháp: Readln(BiếnTệp, Danh sách Biến);

Thủ tục này đọc tất cả các giá trị trên dòng hiện tại, sau đó con trỏ sẽ nhảy xuống dòng kế tiếp

Ví dụ 1 Diện tích tô đen

Tính và đưa ra màn hình diện tích phần tô đen trong hình sau

Trang 11

N K T H

Writeln(‘Dien tich to den la:’,S:0:2);

Readln;

End.

Ví dụ 2 Diện tích tam giác DTTG

Viết chương trình nhập vào độ dài hai cạnh của tam giác và góc giữa hai cạnh đó, sau

đó tính và in ra màn hình diện tích của tam giác

Write('Nhap vao do dai canh thu nhat: '); Readln(a);

Write('Nhap vao do dai canh thu hai: '); Readln(b);

Write('Nhap vao goc giua hai canh: '); Readln(goc);

Dientich:=a*b*sin(goc)/2;

Writeln('Dien tich cua tam giac la: ',Dientich:0:2);

Readln;

End.

Ví dụ 3 Hoán đổi HOANDOI

Viết chương trình nhập vào 2 số a, b Sau đó hoán đổi giá trị của 2 số đó:

Chương trình 1: Dùng biến trung gian

Program Swap;

Begin

Write('Nhap vao a= '); Readln(a);

Write('Nhap vao b= '); Readln(b);

Write('Nhap vao a= '); Readln(a);

Write('Nhap vao b= '); Readln(b);

Trang 12

Assign(fi, finame); Reset(fi);

Assign(fo, foname); Rewrite(fo);

Bài 1 Tính biểu thức BIEUTHUC

Viết chương trình nhập vào các số nguyên: a, b, x, y, sau đó in ra màn hình kết quả của các biểu thức sau:

Bài 2 Diện tích tam giác DTTG

Cho độ dài 3 cạnh tam giác Viết chương trình tính diện tích tam giác

Bài 3 Cực đại CUCDAI

Viết chương trình tách một số n thành 2 số a, b sao cho tích P=a*b2 đạt cực đại với n được nhập vào từ bàn phím

Bài 4 Diện tích lớn nhất DTLN

Cho chu vi của một hình chữ nhật In ra màn hình diên tích lớn nhất mà hình chữ nhật

có thể có được

Ví dụ:

Nhap chu vi: 20

Dien tich lon nhat co the: 25

Bài 5 Đếm số byte1 DEMBYTE1

Màn hình đồ họa của một máy tính có độ phân giải: 640x480 Biết rằng, mỗi điểm trên màn hình chiếm 1 byte Hỏi cần bao nhiêu byte để lưu trữ toàn bộ màn hình đồ họa đó?

Có 2 sinh viên viết chương trình tính số byte lưu trữ màn hình đồ họa:

Trang 13

N K T H

Hãy cho biết 2 chương trình trên cho kết quả đúng hay sai? Tại sao?

Bài 6 Đếm số byte2 DEMBYTE2

Màn hình đồ họa của một máy tính có độ phân giải: 640x480 Biết rằng, mỗi điểm trên màn hình chiếm 1 byte Hỏi cần bao nhiêu byte để lưu trữ một vùng có kích thước bằng 1/10 màn hình đồ họa đó?

Có 2 sinh viên viết chương trình giải bài toán này như sau:

Ví dụ: nhap so n = 2314 Tong chu so la 10

Bài 9 Căn bậc n CAN

Viết chương trình tính n x, x>0

Bài 10 Nhập xuất từ tệp TEP

Viết lại chương trình cho các bài tập trên, yêu cầu nhập xuất từ tệp

Trang 14

Bài 2 Cực đại CUCDAI

Gọi x là số thứ hai thì số thứ nhất là: (n-x) Theo đề ta có: P(x) = x2.(n-x).Hàm P đạt cực đại khi P’(x) = -3x2 + 2nx = 0  x = 2n/3

Bài 3 Căn bậc n CAN

Write('Nhap vao n= '); Readln(n);

Write('Nhap vao x= '); Readln(x);

S:=EXP(1/n*LN(x));

Writeln('S = ',S:0:2);

Readln;

End.

Trang 15

N K T H

Const n: S n ; END;

CASE B OF

Const 1: S 1 ; Const 2: S 2 ;

Const n: S n ; ELSE S n+1 ;

END;

Trong đó:

- B: Biểu thức kiểu vô hướng đếm được như kiểu nguyên, kiểu logic, kiểu ký tự,

kiểu liệt kê

- Const i: Hằng thứ i, có thể là một giá trị hằng, các giá trị hằng (phân cách nhau

bởi dấu phẩy) hoặc các đoạn hằng (dùng hai dấu chấm để phân cách giữa giá trị đầu và giá trị cuối)

- Giá trị của biểu thức và giá trị của tập hằng i (i=1¸n) phải có cùng kiểu

Khi gặp lệnh CASE, chương trình sẽ kiểm tra:

- Nếu giá trị của biểu thức B nằm trong tập hằng const i thì máy sẽ thực hiện lệnh

Si tương ứng

- Ngược lại:

+ Đối với dạng 1: Không làm gì cả

+ Đối với dạng 2: thực hiện lệnh Sn+1

Trang 16

Ví dụ 1 Kiểm tra chẵn lẻ CHANLE

Viết chương trình nhập vào một số nguyên và kiểm tra xem số vừa nhập là số chẵn hay số lẻ

Ví dụ 2 Giải phương trình bậc nhất PTBI

Viết chương trình giải phương trình bậc nhất ax+b=0

End;

Readln;

End.

III BÀI TẬP

Bài 1 Giải phương trình bậc hai PTBII

Viết chương trình giải phương trình bậc hai: ax2 + bx + c = 0, a≠0

Trang 17

N K T H

Bài 2 Tính số giây GIAY

Viết chương trình nhập vào từ bàn phím: giờ, phút, giây Cộng thêm một số giây cũng được nhập từ bàn phím Hãy in ra kết quả sau khi cộng xong

Vd: nhập vào 08:30:20 và 80 xuất ra 08:31:40

Bài 3 Tìm max – min MAXMIN

Viết chương trình tìm Max, Min của 4 số: a, b, c, d

Ví dụ: nhập 3 5 8 2 xuất ra Max=8 Min=2

Bài 4 Tìm ngày tháng NGAYTHANG

Viết chương trình nhập vào ngày, tháng, năm, máy sẽ hiện lên ngày, tháng, năm của ngày hôm sau

Ví dụ: nhập vào 24/08/2012 xuất ra 25/08/2012

Bài 5 Màu ô

Bàn cờ vua kích thước 8*8 gồm 64 ô đen trắng xen kẽ nhau Ô

(i, j) là ô ở hàng i, cột j Biết ô đầu tiên có tọa độ (1, 1) mang

màu trắng Nhập tọa độ một ô bất kỳ trong bàn cờ vua, cho biết

ô đó có màu gì? (trắng hay đen)

Input: 2 số nguyên dương x, y là tọa độ ô cần xét.

Output: kết luận về màu của ô (x, y)

Nhap toa do o thu nhat: 1 3

Nhap toa do o thu hai 1 4

Hai o khong trung mau

Bài 7 Kiểm tra tam giác

Nhập vào độ dài 3 cạnh a, b, c Cho biết 3 cạnh đó có lập thành 1 tam giác hay không?

Ví dụ:

Nhap 3 canh a, b, c: 3 4 5

3 canh co the tao thanh tam giac

Bài 8 Loại tam giác

Nhập 3 cạnh tam giác Cho biết đó là tam giác gì? Tam giác cân, tam giác đều, tam giác vuông cân, tam giác vuông, tam giác cân, tam giác thường hay không phải là tam giác

Ví dụ:

Nhap 3 canh tam giac: 3 4 5

Day la tam giac vuong

Bài 9 Tính tiền điện

Trang 18

Tính tiền điện của một hộ gia đình khi cho biết chỉ số điện kế tháng này và chỉ số điện

kế tháng trước Từ đó tính ra KW tiêu thụ Tiền điện được tính như sau:

Từ KW số <= 60: 1000 đ/KW, từ số 61 – 120: 1200 đ/ KW, từ số 121 – 300: 2000 đ/

KW, > 300: 4000 đ/kW

Ví dụ:

Nhap chi so dien ke thang nay: 750

Nhap chi so dien ke thang truong: 300

So tien la: 1092000 dong.

Delta<0: Phương trình vô nghiệm

Delta=0: Phương trình có nghiệm kép: x = -b/(2*a)

Delta>0: Phương trình có 2 nghiệm phân biệt:

x1,2 = (-b±SQRT(Delta))/(2*a)

Bài 2 Tính số giây GIAY

- Gọi số giây được cộng thêm là: ss Gán giây:=giây+ss

- Nếu giây≥60 thì: phút:=phút + giây DIV 60 và giây:=giây MOD 60

- Nếu phút≥60 thì: giờ:=giờ + phút DIV 60 và phút:=phút MOD 60

Bài 3 Tìm ngày tháng NGAYTHANG

Biện luận theo tháng Gom tháng thành 3 nhóm: tháng có 31 ngày (1,3,5,7,8,10,12), tháng có 30 ngày (4,6,9,11) và tháng 2 (có 28 hoặc 29 ngày tùy theo năm nhuận).Dùng lệnh lựa chọn:

 số k nếu có sẽ là phần nguyên của sqrt(2*n)

vây Ta sẽ tìm k = trunc(sqrt(2*n), sau đó thử lại xem 2*n có bằng k*(k+1) hay không?

Trang 19

N K T H

FOR <biến đếm>:=<giá trị Max> DOWNTO <giá trị Min> DO S;

Sơ đồ thực hiện vòng lặp FOR:

Chú ý: Khi sử dụng câu lệnh lặp FOR cần chú ý các điểm sau:

- Không nên tuỳ tiện thay đổi giá trị của biến đếm bên trong vòng lặp FOR

vì làm như vậy có thể sẽ không kiểm soát được biến đếm

- Giá trị Max và Min trong câu lệnh FOR sẽ được xác định ngay khi vào đầu vòng lặp Do đó cho dù trong vòng lặp ta có thay đổi giá trị của nó thì số lần lặp cũng không thay đổi

Dạng REPEAT: Lặp lại công việc S cho đến khi biểu thức B=TRUE thì dừng.

Dạng WHILE: Trong khi biểu thức B=TRUE thì tiếp tục thực hiện công việc S.

Trang 21

N K T H

Write('Nhap vao mot so nguyen N= '); Readln(N);

If N MOD 2 = 0 Then dem:=dem+1;

Trang 22

Viết chương trình nhập vào số nguyên N In ra màn hình tất cả các ước số của N.

Ý tưởng : Cho biến i chạy từ 1 tới N Nếu N MOD i=0 thì viết i ra màn hình

Ví dụ 6 Ước chung lớn nhất và bội chung nhỏ nhất UOCBOI

Viết chương trình tìm USCLN và BSCNN của 2 số a, b được nhập vào từ bàn phím

Ý tưởng :

- Tìm USCLN: Lấy số lớn trừ số nhỏ cho đến khi a=b thì dừng Lúc đó: USCLN=a

- BSCNN(a,b) = a*b DIV USCLN(a,b)

Trang 23

N K T H

Writeln('BSCNN= ',a*b DIV aa);

Ứng với mỗi bộ abc, ta sẽ kiểm tra: Nếu 100.a + 10.b + c = a3 + b3 + c3 thì in ra

Ví dụ 8 Kiểm tra nguyên tố NGUYENTO

Viết chương trình nhập vào số tự nhiên N rồi thông báo lên màn hình số đó có phải là

số nguyên tố hay không

For i:=2 To N div 2 Do

If N MOD i=0 Then d:=d+1;

Trang 24

Cho 2 tệp văn bản NGUYEN1.INP và NGUYEN2.INP, mỗi dòng của 2 tệp chứa một

số số nguyên Hãy lập trình tạo tệp văn bản NGUYEN12.OUT, những dòng đầu tiên là các dòng của tệp NGUYEN1.INP, những dòng còn lại là của tệp NGUYEN2.INP

Ví dụ

NGUYEN1.INP NGUYEN2.INP NGUYEN12.OUT

1 3 5

2

5 2 4

Ý tưởng

Vì không biết tệp có bao nhiều giá trị, ta Sử dụng hàm eof kết hợp với câu lệnh while

để đọc từng giá trị Mỗi lần đọc lưu vào biến temp và ghi ngay temp ra tệp NGUYEN12.OUT Sau khi đọc xong tệp NGUYEN1.INP ta đọc tiếp NGUYEN2.INP

assign(fi1,'nguyen1.inp');reset(fi1); //doc file 1 va xuat ra

while not eof(fi1) do

assign(fi2,'nguyen2.inp');reset(fi2); //doc file 1 va xuat ra

while not eof(fi2) do

Bài 1 Bảng mã Ascii ASCII

Viết chương trình in ra màn hình các giá trị của bảng mã ASCII từ 0→255

Bài 2 In số INSO

Viết chương trình in ra màn hình các số nguyên từ 1 đến 100 mỗi 10 số trên một dòng

Bài 3 In bảng cửu chương CUUCHUONG

Viết chương trình in ra màn hình bảng cữu chương

Bài 4 Tính các tổng CACTONG

Viết chương trình tính các tổng sau:

S0 = n! = 1*2* *n {n giai thừa}

S1 = 1 + 1/2 + + 1/n

Trang 25

N K T H

Viết chương trình để tìm lời giải cho bài toán sau:

Trong giỏ vừa thỏ vừa gà,Một trăm cái cẳng bốn ba cái đầu

Hỏi có mấy gà mấy thỏ?

Bài 6 Đếm trâu DEMTRAU

Viết chương trình để tìm lời giải cho bài toán sau:

Trăm trâu trăm bó cỏ

Bó lại cho trònTrâu đứng ăn nămTrâu nằm ăn baNăm trâu nghé ăn một

Hỏi có bao nhiêu trâu đứng, trâu nằm, trâu nghé?

Bài 7 Chẵn lẻ CHANLE

Viết chương trình nhập vào các số nguyên từ bàn phím cho đến khi nào gặp số nguyên

tố thì kết thúc nhập Tính tổng các số chẵn và trung bình cộng các số lẻ

Bài 8 Chữ số CHUSO

Viết chương trình nhập vào một số nguyên dương Hãy thông báo lên màn hình số đó

có bao nhiêu chữ số và tổng các chữ số của số đó

Ví dụ: nhập vào n = 1234 xuất ra 4 10

Bài 9 In số nguyên tố INNT

Viết chương trình in ra màn hình tất cả các số nguyên tố từ 2 đến N Với N được nhập

từ bàn phím

Ví dụ: nhập N = 10 thì sẽ in ra : 2 3 5 7

Bài 10 Phân tích thừa số nguyên tố TSNT

Viết chương trình mô tả quá trình phân tích một số ra thừa số nguyên tố Ví dụ: N=100

Trang 26

Bài 12 In bảng xoắn ốc XOANOC

Viết chương trình in ra các số nguyên từ 1 đến N2 theo hình xoắn ốc với N được nhập vào từ bàn phím Ví dụ, với N=5 ta có:

Bài 1 Bảng mã Ascii ASCII

Cho biến i chạy từ 0 → 255 In ra màn hình i và CHR(i)

Bài 2 In số INSO

Cho biến i chạy từ 1 → 100 In ra màn hình i và kiểm tra: nếu i MOD 10=0 thì WRITELN

Bài 3 In bảng cửu chương CUUCHUONG

Dùng 2 vòng lặp FOR lồng nhau: i là số bảng cữu chương (2 9), j là số thứ tự trong từng bảng cửu chương (1 10)

Bài 6 Số hoàn thiện HOANTHIEN

Tính tổng các ước số của N: từ 1 → N div 2 lưu vào biến S

Nếu S=N thì N là số hoàn thiện

Trang 27

N K T H

Cú pháp khai báo trực tiếp:

VAR TenBienMang : ARRAY[CSDau CSCuoi] OF KieuPhanTu;

CSDau CSCuoi dùng để xác định miền chỉ số của mảng, cũng là để xác định

số phần tử của mảng Csdau và cscuoi thường là kiểu số nguyên, csdau thường bắt đầu

từ 1

Ví dụ: khai báo mảng có 7 phần tử để lưu trữ 7 số nguyên

VAR t:ARRAY[1 7] OF LongInt;

Ngoài cách trên ta còn có cách khai báo gián tiếp như sau:

TYPE TenKieuMang = ARRAY[CSDau CSCuoi] OF KieuPhanTu;

VAR TenBienMang:TenKieuMang;

Ví dụ: khai báo mảng trên theo cách gián tiếp

TYPE M1C = ARRAY[1 7] OF Longint;

Thủ tục xáo trộn bộ số ngẫu nhiên : Randomize;

Hàm tạo ra số ngẫu nhiên trong khoảng [0,k): Random(k);

Trang 28

Ví dụ 1 Nhiệt độ trong tuần NHIETDO

Nhập nhiệt độ mỗi ngày trong tuần, tính nhiệt độ trung bình của tuần và số lượng ngày trong tuần có nhiệt độ cao hơn nhiệt độ trung bình

FOR i:=1 TO 7 DO read(fi, t[i]);

Để tính trung bình, ta tính tổng nhiệt độ 7 ngày trước Ta dùng vòng lặp duyệt qua các phần tử trong mảng và cộng dồn vào biến S

FOR i:=1 TO 7 DO s:=s+t[i];

Để điếm số ngày thỏa đề bài, ta cũng dùng vòng lặp duyệt qua các phần tử trong mảng Phần tử nào thỏa điều kiện thì tăng dem

FOR i:=1 TO 7 DO

IF nhietdo[i] > tb THEN inc(d);

Chương trình

PROGRAM nhietdotrungbinh;

Trang 29

N K T H

IF nhietdo[i] > tb THEN inc(d);

{Xuat ket qua}

Const

Fin=’SAPXEP.INP’;

Fon=’SAPXEP.OUT’;

Maxn = 1000;

Trang 30

Tạo mảng Ngẫu nhiên

Đề bài yêu cầu tạo mảng số ngẫu nhiên chứ không phải đọc từ tệp cho trước Các số ngẫu nhiên này do máy sinh ra và ta không biết trước giá trị Việc tạo số ngẫu nhiên giống như trò chơi “Lô tô” Đầu tiên ta phải làm thao tác “xóc túi” để xáo trộn các con

số bằng thủ tục xáo trộn bộ số ngẫu nhiên : Randomize; Thao tác này chỉ cần làm

một lần trong chương trình

Sau khi xáo trộn, khi nào cần tạo ra một giá trị ngẫu nhiên ta sử dụng hàm tạo giá trị ngẫu nhiên Random(k:word): word Hàm này sẽ cho ta một giá trị ngẫu nhiên thuộc

[0, k)

Để tạo ra mảng gồm n giá trị ngẫu nhiên, ta sẽ thực hiện n lần, mỗi lần tạo một giá trị

và lưu vào một phần tử của mảng a

Để tạo một giá trị ngẫu nhiên từ -1000 1000, ta có nhiều cách Ví dụ: -1000 + random(2000); hoặc random(1000) – random(1000);

Read(fi, n);

Randomize;

For i:=1 to n do a[i]:=-1000+random(2000);

Sau khi tạo xong ta có thể xuất mảng a để xem giá trị :

For i:=1 to n do write(fo,a[i],’ ‘);

Sắp xếp mảng: có nhiều thuật toán khác nhau để sắp xếp mảng tăng dần, ta có thể sử

dụng thuật toán “nổi bọt” như sau:

Ý tưởng: so sánh từng cặp 2 phần tử kề nhau, nếu sai vị trí thì đảo lại.

Lần 1: duyệt từ phần từ 1 đến phần tử n-1, nếu a[i]>a[i+1] thì đảo lại Sau lần này ta

được phần tử lớn nhất “nổi” về đúng vị trí (cuối cùng) n

Lần 2: duyệt từ phần tử 1 đến phần tử n-2, nếu a[i]>a[i+1] thì đảo lại Sau lần này ta

được phần tử lớn nhì“nổi” về đúng vị trí (kế cuối) n-1

Lần n-1: duyệt từ phần tử 1 đến phần tử n - (n-1) nếu a[i]>a[i+1] thì đảo lại Sau lần

này ta được phần tử lớn thứ n-1 “nổi” về đúng vị trí (thứ 2)

Trang 31

N K T H

For i:=1 to n do a[i]:=-1000+random(2000);

{Xuat mang chua sap xep}

For i:=1 to n do write(fo,a[i],' ');

{Sap xep mang}

Lớp của Bờm tuy không phải là lớp chuyên nhưng phong

trào học Toán – Tin rất sôi động Thầy giáo của Bờm rất

tâm huyết, luôn tìm các bài toán hay, mới, lạ, đặc biệt là

bài toán quy luật để dạy trò Một hôm, thầy giáo đến lớp

thật sớm trước tiết toán, viết lên bảng một dãy có quy luật

số 0, 4, 6, 9 có một “lỗ hổng” và đặc biệt chữ số 8 có đến 2 lỗ hổng Hôm sau Bờm rất

Trang 32

1 3 2 4

Trang 33

N K T H

Bài 2 Nhập xuất mảng bằng tệp NHAPMANG2

Cho 2 số n, k và mảng a gồm n phần tử nguyên a1, a2, …, an Tìm các phần tử có giá trị bằng ak

Bài 4 Xếp gạch XEPGACH

Minh rất thíc trò chơi xếp các chiếc hộp có hình viên gạch Minh đặt các viên gạch chồng lên nhau và xây thành nhiều chồng có độ cao khác nhau Minh khoe với chị rằng “Chị trông, em đã xây được một bức tường” Chị Minh trả lời: “Em phải xếp các viên gạch có độ cao giống nhau mới được gọi là một bức tường” Sau khi nghe chị nó

Trang 34

Yêu cầu:Hãy lập trình đưa ra số lần di chuyển ít nhất của các viên gạch sao cho từ các

chồng gạch có độ cao khác nhau trở thành các chồng gạch có độ cao bằng nhau; lần lượt từng viên một cho đến khi hoàn thành công việc

Dữ liệu vào: cho trong file XEPGACH.INP

• Dòng đầu tiên là số chồng gạch n (1<=n<=50)

• Dòng tiếp theo lần lượt là các số nguyên hi, độ cao của chồng gạch thứ i (1<=hi<=100, I = 1 n)

Dữ liệu ra: xuất kết quả ra file XEPGACH.OUT

• Một số nguyên dương duy nhất là số lần di chuyển các viên gạch ít nhất Nếu không thể xếp được thì ghi -1

Bài 5 Chia mảng CHIAMANG

Tìm cách chia dãy số nguyên không âm a1, a2, ,an, n > 1 cho trước thành hai đoạn có tổng các phần tử trong mỗi đoạn bằng nhau

Bài 6 Chia mảng tỉ lệ 1:k CHIAMANG1K

Tìm cách chia dãy số nguyên không âm a1, a2, ,an, n > 1 cho trước thành hai đoạn có tổng các phần tử trong một đoạn gấp k lần tổng các phần tử trong đoạn kia, k nguyên

Trang 35

N K T H

Ví dụ

Input

6 3

1 2 3 4 5 9Output3

Giải thích: mảng chia thành 2 đoạn Đoạn 1 gồm: 1, 2, 3 có tổng bằng 6, đoạn 2 gồm

4, 5, 9 có tổng bằng 18

Bài 7 Kiểm tra mảng tăng dần

Cho n và dãy số nguyên a1, a2, …, an Kiểm tra dãy số có phải là dãy tăng dần không?

Bài 8. Thêm phần tử INSERT (BẮT ĐẦU HỌC KỲ II)

Cho 2 mảng a, b và các số nguyên k, x Lần lượt thực hiện các thao tác sau:

1 Thêm phần tử có giá trị x vào đầu mảng a

2 Thêm một phần tử có giá trị x vào mảng tại vị trí k

3 Chèn mảng b vào mảng a tại vị trí k

INSERT.INP

Dong 1: mảng a Dòng 2: x k Dòng 3: mảng b

Bài 9 Tìm min – max MINMAX

Cho dãy a có n số ngyên Tìm giá trị lớn nhất và nhỏ nhất của dãy

Trang 36

Bài 10 Đổi chỗ Min Max

Nhập mảng a có n phần tử nguyên dương Viết chương trình đổi chỗ 2 phần tử lớn nhất và nhỏ nhất cho nhau Nếu có nhiều phần tử lớn nhất và nhỏ nhất thì đổi chỗ phần

tử lớn có chỉ số lớn nhất và phần tử nhỏ nhất có chỉ số lớn nhất

DVT.INP DVT.OUT

4 3 3 4 5 6 8 6 8 4 9 8 4 5 6 9 6 8

Bài 11 Tích lớn nhất TICHMAX

(Đề thi tuyển sinh lớp chuyên Tin trường phổ thông năng khiếu 2007)

Cho một dãy gồm N số nguyên Hãy tìm 3 số trong dãy với tích T của chúng là lớn nhất

Dữ liệu: Vào từ file văn bản TICHMAX.INP:

• Dòng đầu ghi số N (3≤N≤10000).

• Dòng thứ hai chứa N số nguyên có giá trị tuyệt đối không vượt quá 30000

Kết quả: Ghi ra file văn bản TICHMAX.OUT một số duy nhất T.

Ví dụ:

Bài 12 Số nhỏ nhất SNN

2011 – HSG Đồng Nai

Trong lớp mẫu giáo có n cháu, mỗi cháu được nhận một

thẻ, Trên mỗi thẻ gán mã số từ 1 đến n Mỗi lượt chơi, cô

giáo đọc ngẫu nhiên hai số x, y trong khoảng từ 1 đến n

Cháu nào có trong tay thẻ có số đã đọc thì đứng lên Nếu

có 2 cháu khác nhau đứng lên, một cháu có thẻ x và cháu

kia có thẻ y, hai cháu phải trình ra một thẻ có mã số nhỏ

nhất của mình Ai có thẻ mang mã số nhỏ hơn sẽ nhận

được toàn bộ thẻ của cháu kia.Trò chơi kết thúc khi chỉ

còn một cháu cầm trong tay tất cả thẻ

TICHMAX.INP TICHMAX.OUT

9

3 5 1 7 9 0 9 -3 10

810

Trang 37

N K T H

Yêu cầu: Hãy cho biết có bao nhiêu cháu còn thẻ trên tay sau khi cô giáo đã đọc m

lượt và số thẻ nhiều nhất mà một cháu nhận được

Dữ liệu vào: từ tập tin văn bản SONHO.INP

-Dòng đầu tiên: hai số n và m.(1<=m<n<=107)

-m dòng sau mỗi dòng ghi hai số tự nhiên x và y

Các số trên cùng một dòng cách nhau qua dấu cách

Kết quả : ghi vào tập tin văn bản SONHO.OUT

-Dòng dầu là số lượng các cháu còn thẻ-Dòng hai là số lượng thẻ nhiều nhất của 1 trong các cháu còn thẻ

Bài 13 Hệ thống đèn màu DEN

Đề thi tin học trẻ Quốc Gia 2009

Có n đèn, mỗi đèn được đánh thứ tự từ 1 -> n Các đèn có khả năng sáng màu xanh hoặc đỏ Ban Tổ chức có quy luật đổi màu như sau:

Ban đầu tất cả đều sáng màu xanh Sau chương trình thứ 1, các đèn có số thứ tự chia hết cho 2 sẽ đổi màu Sau chương trình thứ k, các đèn có số thứ tự chia hết cho k+1

sẽ đổi màu (xanh thành đỏ và đỏ thành xanh)

Yêu cầu: Cho trước n và k, đếm xem có bao nhiêu đèn màu đỏ khi kết thúc k chương

Trang 38

Bài 14 Kiến thông minh KIEN

(Tin học trẻ toàn quốc 2011 – Bảng B)

Kiến chúa tổ chức cuộc thi “kiến thông minh” trên

một đoạn thẳng nằm ngang độ dài n đơn vị, tổ kiến

nằm ở một đầu mút đoạn thẳng đó Khi mỗi chú kiến

thợ vào thi, Kiến chúa rải n miếng đường đánh số từ

1 đến n Miếng đường thứ i có trọng lượng wi được

đặt trên đoạn thẳng ở vị trí cách tổ kiến đúng i đơn

vị độ dài (i = 1, 2, …, n)

Mỗi chú kiến thợ cần thực hiện đúng 3 lượt kiếm

mồi trong bài thi của mình Ở mỗi lượt chú kiến thợ

xuất phát từ tổ, đi tới vị trí một miếng đường và tha

miếng đường đó về tổ, lượt chơi tiếp theo tiến hành

tương tự, tất nhiên những miếng đường đã tha về tổ

sẽ không còn trên đoạn đường thẳng ở vị trí cũ nữa

Một bài thi của chú kiến thợ là hợp lệ nếu tổng quãng đường di chuyển của chú kiến trong cả ba lượt kiếm mồi không vượt quá T Điểm của bài thi là tổng trọng lượng của

ba miếng đường mà chú kiến thợ kiếm được

Em được cho trước số nguyên dương n, số nguyên dương T, hai số nguyên dương a, m

để xác định dãy w1, w2, …, wn theo công thức:

wi = ai mod m + 1Yêu cầu: Xác định điểm tối đa mà một chú kiến thợ có thể kiếm được trong bài thi của kiến chúa

Ví dụ: với n = 5, T = 15, a = 4, m = 9 Dãy w1 5 = (5, 8, 2, 5, 8) Các miếng đường được bố trí theo sơ đồ sau

Phương án kiếm được nhiều điểm nhất (18 điểm) cho chú kiến thợ là tha 3 miếng đường số 1, 2 và 4 về tổ Tổng quãng đường di chuyển là 14

Em cần tạo 10 file kết quả các tên dạng ANT?.TXT, trong mỗi file, ghi một số nguyên duy nhất là kết quả tìm được ứng với một bộ giá trị (n, T, m) cho dưới đây

Trang 39

N K T H

Bài 15 Chuỗi hạt CHUOIHAT

Trong một tệp văn bản tên CHUOI.DAT có biểu diễn một

chuỗi hạt, mỗi hạt có thể nhận một trong số các màu mã số từ 1

đến 30

Lập trình thực hiện các việc sau:

a) Đọc chuỗi hạt từ tệp vào mảng nguyên dương a

b) Hiển thị số màu có trong chuỗi

c) Tìm một điểm để cắt chuỗi rồi căng thẳng ra sao cho

tổng số các hạt cùng màu ở hai đầu là lớn nhất

Chuỗi được thể hiện trong tệp dưới dạng hình thoi, dòng đầu tiên và dòng cuối cùng mỗi dòng có một hạt

Mỗi dòng còn lại có hai hạt (xem hình)

Các hạt của chuỗi được đánh số bắt đầu từ hạt trên cùng và theo chiều kim đồng hồ

Số màu trong chuỗi: 5 Cắt giữa hạt thứ 7 và thứ 8, tổng số lớn nhất là 7.

Tìm số viên gạch cao hơn chiều cao trung bình (hoặc thấp hơn chiều cao trung bình)

Bài 5 Chia mảng CHIAMANG

Kí hiệu sum(a[d c]) = a[d] + a[d +1]+ + a[c].

Gọi t là tổng các phần tử của mảng: t = sum(a[1 n])

Muốn chia a thành hai đoạn a[1 i] và a[i+1 n] có tổng bằng nhau ta phải có:

1 t là số chẵn (t chia hết cho 2) Đặt t2 = t div 2.

2 (tồn tại số i: 1 <= i <= n): sum(a[1 i]) = t2.

Bài 6 Chia mảng tỉ lệ 1:k

Gọi t là tổng các phần tử của dãy a, t = sum(a[1 n])

Muốn chia a thành hai đoạn a[1 i] và a[i + 1 n] có tổng gấp nhau k lần ta phải có:

1 t chia hết cho (k + 1) Đặt t1 = t div (k + 1) và tk = t - t1.

2 (#E i: 1 <= i <= n): sum(a[1 i]) = t1 hoặc sum(a[1 i]) = tk

Trang 40

luận là bài toán vô nghiệm Trường hợp này ta phải tiếp tục tích luỹ tr để hi vọng đạt

được tổng tr = tk Nếu sau khi tích luỹ ta thu được tr = tk thì bài toán có nghiệm i, ngược lại, khi tr > tk ta kết luận là bài toán vô nghiệm.

Bài 11 Tích lớn nhất TICHMAX

Lời giải

Nếu tích lớn nhất của 3 phần tử bao gồm:

• Ba số dương: ba số này phải lần lượt là số lớn nhất, nhì, ba trong dãy

• Một số âm và hai số dương: dãy phải gồm đúng hai số dương, vì nếu không ta

có thể lấy tích ba số dương để đạt giá trị lớn hơn Ta cũng suy ra ba số này phải

ba số cần tìm phải là ba số lớn nhất, nhì, ba của dãy

Vậy suy ra, T=max(max1*max2*max3,min1*min2*max1), với max1, max2, max3, min1, min2 lần lượt là số lớn nhất, nhì, ba và số nhỏ nhất, nhì của dãy

Bài 12 Số nhỏ nhất (DN – 2011 – V2)

Dùng mảng a[1 n] để đánh dấu việc giữ thẻ của các em a[k] = x: em thứ x giữ thẻ k.Thuật toán

Khởi tạo em thứ I giữ thẻ i

For <mỗi lượt đọc x, y> do

nx = thẻ nhỏ nhất của học sinh a[x];

ny = thẻ nhỏ nhất của học sinh a[y];

If nx<ny then em a[x] sẽ lấy thẻ y luôn

Else em a[y] sẽ lấy thẻ x;

Số lượng người còn lại = số phần tử khác nhau của mảng a.

Số lượng thẻ nhiều nhất = phần tử lặp nhiều nhất

Bài 13 Hệ thống đèn màu DEN

Lưu trạng thái các đèn vào us[], us[x] =0 tức đèn x đang xanh, ngược lại us[x]=1 là đèn đang đỏ

Duyệt qua từng chương trình, chương trình thứ i, bắt đầu từ đèn thứ i+1, cứ cách i+1 đèn là có đèn đổi màu ta cập nhật lại trạng thái đèn Để thuận tiện ta cho i chạy từ 1 đến k+1

Bài 14 Kiến thông minh KIEN

Lời giải

Đầu tiên tạo mảng theo biểu thức wi = ai mod m + 1, chú ý sử dụng tính chất

ai = ai-1*a và (a*b) mod m = ((a mod m) * (b mod m)) mod m

để làm giảm kích thước số

Ngày đăng: 20/07/2016, 20:02

HÌNH ẢNH LIÊN QUAN

Sơ đồ khối - Lý thuyết và bài tập lập trình pascal bậc THPT
Sơ đồ kh ối (Trang 4)
Sơ đồ thực hiện: - Lý thuyết và bài tập lập trình pascal bậc THPT
Sơ đồ th ực hiện: (Trang 15)
Sơ đồ thực hiện vòng lặp FOR: - Lý thuyết và bài tập lập trình pascal bậc THPT
Sơ đồ th ực hiện vòng lặp FOR: (Trang 19)
Bài 1. Bảng mã Ascii ASCII - Lý thuyết và bài tập lập trình pascal bậc THPT
i 1. Bảng mã Ascii ASCII (Trang 24)

TỪ KHÓA LIÊN QUAN

w