1. Trang chủ
  2. » Giáo án - Bài giảng

Tai lieu boi duong HSG pascal

196 274 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 196
Dung lượng 1,87 MB

Nội dung

CÁC CÂU LỆNH CÓ CẤU TRÚC I. CÂU LỆNH RẼ NHÁNH 1.1. Lệnh IF Cú pháp: (1) IF B THEN S; (2) IF B THEN S1 ELSE S2; Chú ý: Khi sử dụng câu lệnh IF thì đứng trước từ khoá ELSE không được có dấu chấm phẩy (;). 1.2. Lệnh CASE Cú pháp: Dạng 1 Dạng 2 CASE B OF Const 1: S1; Const 2: S2; ... Const n: Sn; END; CASE B OF Const 1: S1; Const 2: S2; ... Const n: Sn; ELSE Sn+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.

Giáo trình tập Pascal Nguyễn Văn Trọng TRƯỜNG THCS TÂN HỘI  GIÁO TRÌNH PASCAL Giáo trình tập Pascal Nguyễn Văn Trọng Chương CÁC THÀNH PHẦN CƠ BẢN CỦA NGÔN NGỮ LẬP TRÌNH PASCAL Pascal ngôn ngữ lập trình bậc cao Niklaus Wirth, giáo sư điện toán trường Đại học kỹ thuật Zurich (Thụy Sĩ) đề xuất năm 1970 Ông lấy tên Pascal để kỷ niệm nhà toán học nhà triết học người Pháp tiếng Blaise Pascal Các tập tin cần thiết lập trình với Turbo Pascal Để lập trình với Turbo Pascal, tối thiểu cần file sau: • TURBO.EXE: Dùng để soạn thảo dịch chương trình • TURBO.TPL: Thư viện chứa đơn vị chuẩn để chạy với TURBO.EXE Ngoài ra, muốn lập trình đồ hoạ phải cần thêm tập tin: • GRAPH.TPU: Thư viện đồ hoạ • *.BGI: Các file điều khiển loại hình tương ứng dùng đồ hoạ • *.CHR: Các file chứa font chữ đồ họa Các bước lập chương trình 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), có lỗi phải sửa lỗi Bước 3: Chạy chương trình (nhấn phím Ctrl-F9) Cấu trúc chung chương trình Pascal { 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 Ví dụ 1: Chương trình Pascal đơn giản Begin BEGIN R:=10; {Bán kính đường tròn} Write(‘Hello World!’); S:=R*R*PI; {Diện tích hình tròn} END Writeln(‘Dien tich hinh tron = ‘, S:0:2); { In Ví dụ 2: hình } Program Vidu2; Readln; End Const PI=3.14; Var R,S:Real; Một số phím chức thường dùng • F2: Lưu chương trình soạn thảo vào đĩa • F3: Mở file file tồn đĩa để soạn thảo • Alt-F3: Đóng file soạn thảo • Alt-F5: Xem kết chạy chương trình • F8: Chạy câu lệnh chương trình • Alt-X: Thoát khỏi Turbo Pascal • Alt-: Dịch chuyển qua lại file mở Giáo trình tập Pascal Nguyễn Văn Trọng • F10: Vào hệ thống Menu Pascal Các thao tác soạn thảo chương trình 5.1 Các phím thông dụng • Insert: Chuyển qua lại chế độ đè chế độ • Del: Xoá ký tự vị trí trỏ chèn • Back Space (): Xóa ký tự bên trái trỏ • Home: Đưa trỏ đầu dòng • Ctrl-PgUp: Đưa trỏ đầu văn • End: Đưa trỏ cuối dòng • Ctrl-PgDn: Đưa trỏ cuối văn • Page Up: Đưa trỏ lên trang hình • Ctrl-Y: Xóa dòng vị trí trỏ • Page Down: Đưa trỏ xuống trang hình 5.2 Các thao tác khối văn • Chọn khối văn bản: Shift + • Ctrl-KY: Xoá khối văn chọn • Ctrl-Insert: Đưa khối văn chọn vào Clipboard • Shift-Insert: Dán khối văn từ Clipboard xuống vị trí trỏ Các thành phần ngôn ngữ Pascal 6.1 Từ khóa Từ khoá từ mà Pascal dành riêng để phục vụ cho mục đích (Chẳng hạn như: BEGIN, END, IF, WHILE, ) Chú ý: Với Turbo Pascal 7.0 trở lên, từ khoá chương trình hiển thị khác màu với từ khác 6.2 Tên (định danh) Định danh dãy ký tự dùng để đặt tên cho hằng, biến, kiểu, tên chương trình Khi đặt tên, ta phải ý số điểm sau: • Không đặt trùng tên với từ khoá • Ký tự tên không bắt đầu ký tự đặc biệt chữ số • Không đặt tên với ký tự space (Khoảng trắng),các phép toán Ví dụ: Các tên viết sau sai 1XYZ Sai bắt đầu chữ số #LONG Sai bắt đầu ký tự đặc biệt FOR Sai trùng với từ khoá KY TU Sai có khoảng trắng (space) LAP-TRINH Sai dấu trừ (-) phép toán 6.3 Dấu chấm phẩy (;) Dấu chấm phẩy dùng để ngăn cách câu lệnh Không nên hiểu dấu chấm phẩy dấu kết thúc câu lệnh Ví dụ: FOR i:=1 TO 10 DO Write(i); Trong câu lệnh trên, lệnh Write(i) thực 10 lần Nếu hiểu dấu chấm phẩy kết thúc câu lệnh lệnh Write(i) thực lần 6.4 Lời giải thích Các lời bàn luận, lời thích đưa vào chỗ chương trình người đọc dể hiểu mà không làm ảnh hưởng đến phần khác chương trình Lời giải thích đặt hai dấu ngoạc { } cụm dấu (* *) Ví dụ: Var a,b,c:Rea; {Khai báo biến} Delta := b*b – 4*a*c; (* Tính delta để giải phương trình bậc *) Giáo trình tập Pascal Nguyễn Văn Trọng Chương CÁC KIỂU DỮ LIỆU CƠ BẢN KHAI BÁO HẰNG, BIẾN, KIỂU, BIỂU THỨC VÀ CÂU LỆNH I CÁC KIỂU DỮ LIỆU CƠ BẢN Kiểu logic - Từ khóa: BOOLEAN - miền giá trị: (TRUE, FALSE) - Các phép toán: phép so sánh (=, ) phép toán logic: AND, OR, XOR, NOT Trong Pascal, so sánh giá trị boolean ta tuân theo qui tắc: FALSE < TRUE Giả sử A B hai giá trị kiểu Boolean Kết phép toán thể qua bảng đây: A B A AND B A OR B A XOR B NOT A TRUE TRUE TRUE TRUE FALSE FALSE TRUE FALSE FALSE TRUE TRUE FALSE FALSE TRUE FALSE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE TRUE Kiểu số nguyên 2.1 Các kiểu số nguyên Tên kiểu Phạm vi Dung lượng Shortint -128 → 127 byte Byte → 255 byte Integer -32768 → 32767 byte Word → 65535 byte LongInt -2147483648 → 2147483647 byte 2.2 Các phép toán kiểu số nguyên 2.2.1 Các phép toán số học: +, -, *, / (phép chia cho kết số thực) Phép chia lấy phần nguyên: DIV (Ví dụ : 34 DIV = 6) Phép chia lấy số dư: MOD (Ví dụ: 34 MOD = 4) 2.2.2 Các phép toán xử lý bit: Trên kiểu ShortInt, Integer, Byte, Word có phép toán: • NOT, AND, OR, XOR A B A AND B A OR B A XOR B NOT A 1 1 0 0 1 0 1 1 0 0 • n SHL (phép dịch trái): a SHL n ⇔ a × • SHR (phép dịch phải): a SHR n ⇔ a DIV 2n Kiểu số thực 3.1 Các kiểu số thực: Tên kiểu Phạm vi Dung lượng -45 +38 Single 1.5× 10 → 3.4× 10 byte Real 2.9× 10-39 → 1.7× 10+38 byte -324 +308 Double 5.0× 10 → 1.7× 10 byte Extended 3.4× 10-4932 → 1.1× 10+4932 10 byte Chú ý: Các kiểu số thực Single, Double Extended yêu cầu phải sử dụng chung với đồng xử lý số phải biên dich chương trình với thị {$N+} để liên kết giả lập số 3.2 Các phép toán kiểu số thực: +, -, *, / Giáo trình tập Pascal Nguyễn Văn Trọng Chú ý: Trên kiểu số thực không tồn phép toán DIV MOD 3.3 Các hàm số học sử dụng cho kiểu số nguyên số thực: SQR(x): SQRT(x): ABS(x): SIN(x): COS(x): ARCTAN(x): LN(x): EXP(x): TRUNC(x): Trả x2 Trả bậc hai x (x≥ 0) Trả |x| Trả sin(x) theo radian Trả cos(x) theo radian Trả arctang(x) theo radian Trả ln(x) Trả ex Trả số nguyên gần với x bé x INT(x): Trả phần nguyên x FRAC(x): Trả phần thập phân x ROUND(x): Làm tròn số nguyên x PRED(n): Trả giá trị đứng trước n SUCC(n): Trả giá trị đứng sau n ODD(n): Cho giá trị TRUE n số lẻ INC(n): Tăng n thêm đơn vị (n:=n+1) DEC(n): Giảm n đơn vị (n:=n-1) Kiểu ký tự - Từ khoá: CHAR - Kích thước: byte - Để biểu diễn ký tự, ta sử dụng số cách sau đây: • Đặt ký tự cặp dấu nháy đơn Ví dụ 'A', '0' • Dùng hàm CHR(n) (trong n mã ASCII ký tự cần biểu diễn) Ví dụ CHR(65) biễu diễn ký tự 'A' • Dùng ký hiệu #n (trong n mã ASCII ký tự cần biểu diễn) Ví dụ #65 - Các phép toán: =, >, >=, 0 d/ e |a + sin2(x) − x| Bài tập 2.5: Viết chương trình tính siện tích tam giác theo công thức sau: S= p( p − a)( p − b)( p − c) với p = (a+b+c) Bài tập 2.6: Viết chương trình tính khoảng cách từ điểm I(x i,yi) đến đường thẳng có phương trình D: Ax + By + C = Gợi ý: Công thức tính khoảng cách: h = A.xi + B y i + C A2 + B Bài tập 2.7: Viết chương trình tách số n thành số a, b cho tích P=a*b đạt cực đại với n nhập vào từ bàn phím Gợi ý: Gọi x số thứ hai số thứ là: (n-x) Theo đề ta có: P(x) = x 2.(n-x) Hàm P đạt cực đại P’(x) = -3x2 + 2nx =  x = 2n/3 Bài tập 2.8: Màn hình đồ họa máy tính có độ phân giải: 640x480 Biết rằng, điểm hình chiếm byte Hỏi cần byte để lưu trữ toàn hình đồ họa đó? Có sinh viên viết chương trình tính số byte lưu trữ hình đồ họa: Program Sinhvien1; Program Sinhvien2; Var a,b:integer; Var a,b:Word; s:Word; s: LongInt; Begin Begin a:=640; b:=480; a:=640; b:=480; s:=a*b; s:=a*b; writeln(s); readln; writeln(s); readln; End End Hãy cho biết chương trình cho kết hay sai? Tại sao? Bài tập 2.9: Màn hình đồ họa máy tính có độ phân giải: 640x480 Biết rằng, điểm hình chiếm byte Hỏi cần byte để lưu trữ vùng có kích thước 1/10 hình đồ họa đó? Có sinh viên viết chương trình giải toán sau: Program Sinhvien1; End Var a,b:Word; Program Sinhvien2; s: LongInt; Var a,b:Word; Begin s: LongInt; a:=640; b:=480; Begin s:=a; s:=s*b; a:=640; b:=480; s:=s DIV 10; s:=a*b DIV 10; writeln(s); readln; writeln(s); readln; Giáo trình tập Pascal Nguyễn Văn Trọng End Hãy cho biết chương trình cho kết hay sai? Tại sao? Chương CÁC CÂU LỆNH CÓ CẤU TRÚC I CÂU LỆNH RẼ NHÁNH 1.1 Lệnh IF Cú pháp: (1) IF B THEN S; (2) IF B THEN S1 ELSE S2; Chú ý: Khi sử dụng câu lệnh IF đứng trước từ khoá ELSE dấu chấm phẩy (;) 1.2 Lệnh CASE Cú pháp: Dạng Dạng CASE B OF CASE B OF Const 1: S1; Const 1: S1; Const 2: S2; Const 2: S2; Const n: Sn; Const n: Sn; END; ELSE Sn+1; END; Trong đó:  B: Biểu thức kiểu vô hướng đếm kiểu nguyên, kiểu logic, kiểu ký tự, kiểu liệt kê  Const i: Hằng thứ i, giá trị hằng, giá trị (phân cách dấu phẩy) đoạn (dùng hai dấu chấm để phân cách giá trị đầu giá trị cuối)  Giá trị biểu thức giá trị tập i (i=1¸n) phải có kiểu Khi gặp lệnh CASE, chương trình kiểm tra: - Nếu giá trị biểu thức B nằm tập const i máy thực lệnh S i tương ứng - Ngược lại:+ Đối với dạng 1: Không làm + Đối với dạng 2: thực lệnh Sn+1 II CÂU LỆNH LẶP 2.1 Vòng lặp xác địnhCó hai dạng sau:  Dạng tiến FOR := TO DO S;  Dạng lùi FOR := DOWNTO DO S; Sơ đồ thực vòng lặp FOR: Dạng tiến Dạng lùi Biến đếm:=Min Biến đếm:=Max Biến đếm=Max Thoát S; DEC(Biến đếm); Thoát Giáo trình tập Pascal Nguyễn Văn Trọng Chú ý: Khi sử dụng câu lệnh lặp FOR cần ý điểm sau:  Không nên tuỳ tiện thay đổi giá trị biến đếm bên vòng lặp FOR làm không kiểm soát biến đếm  Giá trị Max Min câu lệnh FOR xác định vào đầu vòng lặp Do cho dù vòng lặp ta có thay đổi giá trị số lần lặp không thay đổi 5.3.2 Vòng lặp không xác định Dạng REPEAT Dạng WHILE Repeat While B Do S; S; Until B; Ý nghĩa: • Dạng REPEAT: Lặp lại công việc S biểu thức B=TRUE dừng • Dạng WHILE: Trong biểu thức B=TRUE tiếp tục thực công việc S Repeat While S B B - + S; Thoát + Thoát BÀI TẬP MẪU Bài tập 3.1: Viết chương trình nhập vào số nguyên kiểm tra xem số vừa nhập số chẵn hay số lẻ Uses crt; Writeln('So vua nhap vao la so Var x:integer; chan') Begin Else Write('Nhap vao mot so nguyen : '); Writeln('So vua nhap vao la so Readln(x); le'); If x MOD 2=0 Then Readln; End Bài tập 3.2: Viết chương trình giải phương trình bậc ax+b=0 Uses Crt; Var a,b,x : real; Begin Write('a = '); Readln(a); Write('b = '); Readln(b); If a = Then { Nếu a } If b = Then { Trường hợp a = b = } Writeln('Phuong trinh co vo so nghiem') Else { Trường hợp a=0 b ≠ } Writeln('Phuong trinh vo nghiem') Else { Trường hợp a ≠ } Begin x:= -b/a; Có N quân Domino xếp thành hàng hình vẽ Mỗi quân Domino chia làm hai phần, phần phần Trên mặt phần có từ đến dấu chấm Ta nhận thấy rằng: Tổng số dấu chấm phần N quân Domino bằng: 6+1+1+1=9, tổng số dấu chấm phần N quân Domino 1+5+3+2=11, độ chênh lệch tổng tổng |9-11|=2 Với quân, bạn quay 1800 để phần trở thành phần dưới, phần trở thành phần trên, độ chênh lệch thay đổi Ví dụ ta quay quân Domino cuối hình độ chênh lệch Bài toán đặt là: Cần quay quân Domino để độ chênh lệch phần phần nhỏ Dữ liệu vào file: “Dom.in” có dạng: - Dòng đầu số nguyên dương N (1≤N≤20) - N dòng sau, dòng hai số ai, bi số dấu chấm phần trên, số dấu chấm phần quân Domino thứ i (1≤ ai, bi ≤6) Kết file: “Dom.out” có dạng: - Gồm dòng nhẩt chứa số nguyên cách dấu cách độ chênh lệch nhỏ số quân Domino cần quay để độ chênh lệch Bài 2: Tham quan Trong đợt tổ chức tham quan danh lam thắng cảnh thành phố Hồ Chí Minh, Ban tổ chức hội thi Tin học trẻ tổ chức cho N đoàn ( đánh từ số đến N) đoàn thăm quan địa điểm khác Đoàn thứ i thăm địa điểm cách Khách sạn Hoàng Đế di km (i=1,2, , N) Hội thi có M xe taxi đánh số từ đến M (M≥N) để phục vụ việc đưa đoàn thăm quan Xe thứ j có mức tiêu thụ xăng vj đơn vị thể tích/km Yêu cầu: Hãy chọn N xe để phục vụ việc đưa đoàn thăm quan, xe phục vụ đoàn, cho tổng chi phí xăng cần sử dụng Dữ liệu: File văn TQ.INP: - Dòng chứa hai số nguyên dương N, M (N≤M≤200); - Dòng thứ hai chứa số nguyên dương d1, d2, , dN; - Dòng thứ ba chứa số nguyên dương v1, v2, , vM - Các số dòng ghi khác dấu trắng Kết quả: Ghi file văn TQ.OUT: - Dòng chứa tổng lượng xăng dầu cần dùng cho việc đưa đoàn thăm quan (không tính lượt về); - Dòng thứ i số N dòng ghi số xe phục vụ đoàn i (i=1, 2, , N) Bài 3: Biểu thức Cho xâu S (chỉ gồm ký tự ‘0’ đến ‘9’, độ dài nhỏ 10) tìm cách chèn vào S dấu '+' '-' để thu số M cho trước (nếu có thể) Xâu S số M (M thuộc kiểu longint) nguyên đọc từ file “BT.INP” Trong file BT.OUT ghi tất phương án chèn (nếu có) ghi "-1" thu M từ cách làm Ví dụ: M = 8, S=’123456789’ phương án là: '-1+2-3+4+5-6+7'; QUY HOẠCH ĐỘNG (Dynamic programming) 5.1 Phương pháp Trong chiến lược chia để trị, người ta phân toán cần giải thành toán Các toán lại tiếp tục phân thành toán nhỏ hơn, tiếp tục ta nhận toán giải dễ dàng Tuy nhiên, trình phân chia vậy, ta gặp nhiều lần toán Tư tưởng phương pháp quy hoạch động sử dụng bảng để lưu giữ lời giải toán giải Khi giải toán cần đến nghiệm toán cỡ nhỏ hơn, ta cần lấy lời giải bảng mà không cần phải giải lại Chính mà thuật toán thiết kế quy hoạch động hiệu để giải toán phương pháp quy hoạch động, cần tiến hành công việc sau: - Tìm nghiệm toán nhỏ - Tìm công thức (hoặc quy tắc) xây dựng nghiệm toán thông qua nghiệm toán cỡ nhỏ - Tạo bảng lưu giữ nghiệm toán Sau tính nghiệm toán theo công thức tìm lưu vào bảng - Từ toán giải để tìm nghiệm toán Sau đây, tìm hiểu số ví dụ minh họa cho phương pháp quy hoạch động 5.2 Số Fibonacci Số Fibonacci xác định công thức:  F0 =   F1 = F = F + F n −1 n−2  n Hãy xác định số Fibonacci thứ n Cách 1: Áp dụng phương pháp chia để trị, ta tính Fn dựa vào Fn-1 Fn-2 function F(n: longint): int64; begin if n số jmax có L[jmax] lớn nhất} jmax := n + 1; for j := i + to n + if (a[j] > a[i]) and (L[j] > L[jmax]) then jmax := j; L[i] := L[jmax] + 1; {Lưu độ dài dãy tăng dài bắt đầu ai} T[i] := jmax; {Lưu vết: phần tử đứng liền sau dãy tăng dài amax} end; Writeln('Length of result : ', L[0] - 2);{Chiều dài dãy tăng dài nhất} i := T[0]; {Bắt đầu truy vết tìm nghiệm} while i n + begin Writeln('a[', i, '] = ', a[i]); i := T[i]; end; end; begin Enter; Optimize; end 5.4 Dãy chung dài Cho hai số nguyên dương N,M ( M>0, N N ≥ j > L[i, j] tính theo công thức truy hồi sau: L[i,j] = Max{L[i, j-1], L[i-1, j], L[i-1, j-1] + x} (với x = A[i] ≠ B[j] , x=1 A[i]=B[j]) const fi = 'LCS.INP'; end; writeln(f,l[m,n]); fo = 'LCS.OUT'; close(f); i := m; MaxMN = 100; end; j := n; var f : text; function max(x,y : longint) : fillchar(p,sizeof(p),0); a,b : array[0 MaxMN] of longint; count:= 0; longint; begin while (i>0) and (j>0) l : array[0 MaxMN,0 MaxMN] if x>y then max := y begin of longint; else max := y; if a[i]=b[j] then m,n : longint; end; begin p : array[0 MaxMN] of longint; procedure Optimize; inc(count); count : longint; var i,j : longint; p[count] := a[i]; procedure Enter; begin dec(i); var f : text; for i:=1 to m l[i,0] := 0; dec(j); begin for j:=1 to n l[0,j] := 0; end m := 0; for i:=1 to m else if l[i,j]=l[i,j-1] then dec(j) n := 0; for j:=1 to n else dec(i); assign(f,fi); begin end; reset(f); if a[i]=b[j] then l[i,j] := l[i-1,j-1] for i:=count downto while not eoln(f) +1 write(f,p[i],' '); begin else l[i,j] := max(l[i,j-1],l[i-1,j]); close(f); inc(m); end; end; read(f,a[m]); end; BEGIN end; procedure Trace; Enter; readln(f); var f : text; Optimize; while not eoln(f) i,j : longint; Trace; begin begin END inc(n); assign(f,fo); read(f,b[n]); rewrite(f); 5.5 Bài toán túi Trong siêu thị có n gói hàng (n

Ngày đăng: 28/10/2017, 02:35

TỪ KHÓA LIÊN QUAN

w