1. Trang chủ
  2. » Thể loại khác

TAI LIEU PASCAL Tài liệu ôn luyện pascal có từ a đến z

328 14 2

Đ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

Nội dung

“Chỉ có thiên tài mới không dùng giấy nháp” ĐỂ HỌC TỐT PASCAL TRUNG HỌC CƠ SỞ Tài liệu ôn luyện pascal có từ a đến z Tài liệu ôn luyện pascal có từ a đến zTài liệu ôn luyện pascal có từ a đến zTài liệu ôn luyện pascal có từ a đến zTài liệu ôn luyện pascal có từ a đến zTài liệu ôn luyện pascal có từ a đến z

“Chỉ có thiên tài khơng dùng giấy nháp” ĐỂ HỌC TỐT PASCAL TRUNG HỌC CƠ SỞ Tài liệu lưu hành nội MỤC LỤC TÁC GIẢ: CN NGUYỄN VĂN SƠN PHẦN A: LÝ THUYẾT PASCAL Chương 1: CÁC THÀNH PHẦN CƠ BẢN CỦA NNLT PASCAL Chương 2: 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 .12 I CÁC KIỂU DỮ LIỆU CƠ BẢN 12 II KHAI BÁO HẰNG 15 III KHAI BÁO BIẾN 15 IV ĐỊNH NGHĨA KIỂU 16 V BIỂU THỨC .16 Chương CÁC CÂU LỆNH CÓ CẤU TRÚC 18 I CÂU LỆNH RẼ NHÁNH 18 II CÂU LỆNH LẶP 19 Chương CHƯƠNG TRÌNH CON: THỦ TỤC VÀ HÀM 21 I KHÁI NIỆM VỀ CHƯƠNG TRÌNH CON .21 II CẤU TRÚC CHUNG CỦA MỘT CHƯƠNG TRÌNH CĨ SỬ DỤNG CTC .21 III BIẾN TOÀN CỤC VÀ BIẾN ĐỊA PHƯƠNG 23 IV ĐỆ QUI .23 Chương DỮ LIỆU KIỂU MẢNG (ARRAY) 26 I KHAI BÁO MẢNG 26 II XUẤT NHẬP TRÊN DỮ LIỆU KIỂU MẢNG 26 Chương XÂU KÝ TỰ (STRING) .27 Cách khai báo biến kiểu xâu: 27 Tham chiếu 27 Các phép toán xử lý xâu 27 Các hàm – thủ tục xử lý xâu 29 Chương DỮ LIỆU KIỂU TỆP 31 I KHAI BÁO 31 II CÁC THỦ TỤC VÀ HÀM CHUẨN 31 III FILE VĂN BẢN (TEXT FILE) .33 PHẦN B: BÀI TẬP PASCAL CHUYÊN ĐỀ I: CÁC BÀI TOÁN CƠ BẢN – XỬ LÝ SỐ 37  DẠNG CÁC BÀI TOÁN CƠ BẢN 37 DẠNG CÁC LOẠI SỐ ĐẶC TRƯNG 49 * Dạng 2.1 Số nguyên tố 49 *Dạng 2.2 Cặp số hữu nghị(Cặp số thân thiết) 55 * Dạng 2.3 Số phương .56 * Dạng 2.4 Cặp số hứa hôn .58 * Dạng 2.5 Số Emirp 60 * Dạng 2.6 Số hoàn hảo 62 * Dạng 2.7 Số mạnh mẽ 63 * Dạng 2.8 Số tự mãn (Số Amstrong) 64 * Dạng 2.9 Số nguyên tố mạnh 67 * Dạng 2.10 Số phong phú(Số không đầy đủ) 69 * Dạng 2.11 Số hạnh phúc 70 * Dạng 2.12 Số bất khả xâm phạm .72 * Dạng 2.13 Số bán hoàn hảo 74 CHUYÊN ĐỀ II: MẢNG MỘT CHIỀU 79 DẠNG 1: TÌM PHẦN TỬ ĐẶC TRƯNG 79 DẠNG TÍNH TỐN VỚI MẢNG 86 DẠNG SẮP XẾP MẢNG 92 DẠNG CHÈN XÓA PHẦN TỬ .95 DẠNG DÃY CON LIÊN TIẾP .102 DẠNG ĐA THỨC BIẾN .112 CHUYÊN ĐỀ III: KIỂU XÂU 118  DẠNG BIẾT ĐỔI XÂU 118  DẠNG XỬ LÝ SỐ TRONG XÂU .128 * Dạng 2.1 Xử lý ký tự số xâu 129 * Dạng 2.2 Xử lý số xâu 132  DẠNG MÃ HÓA – GIẢI MÃ .142 * Dạng 2.1: Mã hóa, giải bằng phương pháp dịch chuyển K ký tự 142 * Dạng 2.2: Nén giải nén .144  DẠNG XÂU CON LIÊN TIẾP 149 * Dạng 4.1 Xâu liên tiếp 149 * Dạng 4.2 Xâu không liên tiếp (Back tracking) 154 CHUYÊN ĐỀ IV BÀI TOÁN LIỆT KÊ ĐỆ QUI – ĐỆ QUI QUAY LUI, PHƯƠNG PHÁP SINH…………………………155  DẠNG ĐỆ QUY 155  DẠNG ĐỆ QUY QUAY LUI (BACK TRACKING) 159 CHUYÊN ĐỀ V: THUẬT TOÁN QUI HOẠCH ĐỘNG 195 LUYỆN ĐỀ: .232 PHẦN A LÝ THUYẾT PASCAL Chương CÁC THÀNH PHẦN CƠ BẢN CỦA NGƠN NGỮ LẬP TRÌNH 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 Ngồ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 Write(‘Hello World!’); END Ví dụ 2: Program Vidu2; Const PI=3.14; Var R,S:Real; Begin R:=10; {Bán kính đường trịn} S:=R*R*PI; {Diện tích hình trịn} Writeln(‘Dien tich hinh tron = ‘, S:0:2); { In hình } Readln; End 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: Thốt khỏi Turbo Pascal  Alt-: Dịch chuyển qua lại file mở  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ế độ chèn  Home: Đưa trỏ đầu dòng  End: Đưa trỏ cuối dòng  Page Up: Đưa trỏ lên trang hình  Page Down: Đưa trỏ xuống trang hình  Del: Xố ký tự vị trí trỏ  Back Space (): Xóa ký tự bên trái trỏ  Ctrl-PgUp: Đưa trỏ đầu văn  Ctrl-PgDn: Đưa trỏ cuối văn  Ctrl-Y: Xóa dịng vị trí trỏ 5.2 Các thao tác khối văn  Chọn khối văn bản: Shift +  Ctrl-KY: Xố 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ừ khố 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ừ khố 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ừ khố  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,các phép tố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ừ khố KY TU Sai có khoảng trắng (space) LAP-TRINH Sai dấu trừ (-) phép toán 10 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 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 *) 11 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 TRUE TRUE TRUE FALSE FALSE TRUE FALSE FALSE Kiểu số nguyên A AND B TRUE FALSE FALSE FALSE A OR B TRUE TRUE TRUE FALSE A XOR B FALSE TRUE TRUE FALSE NOT A FALSE FALSE TRUE TRUE 2.1 Các kiểu số nguyên Tên kiểu Phạm vi Shortint -128  127 Byte  255 Integer -32768  32767 Word  65535 LongInt -2147483648  2147483647 2.2 Các phép toán kiểu số nguyên Dung lượng byte byte byte byte byte 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 tốn:  NOT, AND, OR, XOR 12 End; BEGIN Read_Data; Process; Write_Data; END 316 ĐỀ SỐ 06: (Đề thi HSG Tỉnh Quảng Bình - Năm học 2014 – 2015) Câu (3,0 điểm): Tách xâu SPLIT.PAS Program Tach_xau; Const fi='SPLIT.INP'; fo='SPLIT.OUT'; Var St,St1,St2:String; f:Text; i:Longint; BEGIN Assign(f,fi); Reset(f); Readln(f,St); Close(f); St1:=''; St2:=''; For i:=1 to Length(St) if St[i] in['0' '9'] then St2:= St2 + St[i] else St1:= St1 + St[i]; Assign(f,fo); Rewrite(f); Writeln(f,St1); Writeln(f,St2); Close(f); END Câu (3,0 điểm): Phân tích số thành thừa số nguyên tố Program Phan_tich_so; Const fi='PRIME.INP'; fo='PRIME.OUT'; Var n:Longint; Procedure Read_Data; Var f:Text; Begin Assign(f,fi); 317 PRIME.PAS Reset(f); Readln(f,n); Close(f); End; Procedure Write_Data; Var i:Longint; f:Text; Begin Assign(f,fo); Rewrite(f); i:=2; While (N mod i = 0) and (N > 1) Begin Write(f,i,' '); N:=N div i; End; i:=3; While (N > 1) Begin While (N mod i = 0) Begin Write(f,i,' '); N:=N div i; End; inc(i,2); End; Close(f); End; BEGIN Read_Data; Write_Data; END Câu (2,0 điểm): Đếm số lượng tam giác Program Dem_soLuong_tam_giac; Const fi='TRCOUNT.INP'; fo='TRCOUNT.OUT'; Type Longint=longint; 318 TRCOUNT.PAS Diem=Record x:Longint; y:Longint; End; mmc=array[1 100] of Diem; Var A:mmc; n:Longint; f:text; Procedure Read_Data; Var f:Text; i:Longint; Begin Assign(f,fi); Reset(f); Readln(f,n); For i:= to n Readln(f,A[i].x,A[i].y); Close(f); End; Function IsTriangle(D1,D2,D3:Diem):Boolean; Var x1,x2,y1,y2: Longint; Begin IsTriangle:=True; x1:=D2.x-D1.x; y1:=D2.y-D1.y; x2:=D3.x-D1.x; y2:=D3.y-D1.y; if x1*y2=x2*y1 then IsTriangle:=False; End; Function Count:Longint; Var d,i,j,k:Longint; Begin d:=0; for i:=1 to n-2 for j:=i+1 to n-1 for k:=j+1 to n if IsTriangle(A[i],A[j],A[k]) then inc(d); Count:=d; 319 End; Procedure Write_Data; Var f:Text; Begin Assign(f,fo); ReWrite(f); Writeln(f,Count); Close(f); End; BEGIN Read_Data; Write_Data; END Câu (2,0 điểm): Dãy liên tiếp SUBSUM.PAS Const fi='SUBSUM.INP'; fo='SUBSUM.OUT'; Type mmc=array[0 10000] of Longint; Var b:mmc; f:text; n,m,d:Longint; Procedure Process; Var i,x,j:Longint; Begin assign(f,fi); reset(f); readln(f,n,m); b[0]:=0; for i:=1 to n Begin read(f,x);b[i]:=b[i-1]+x;End; close(f); d:=0; for i:=1 to n for j:=i to n Begin if b[j]-b[i-1]=m then d:=d+1; if b[j]-b[i-1]>m then break; End; 320 assign(f,fo); rewrite(f); writeln(f,d); close(f); End; BEGIN Process; END 321 ĐỀ SỐ 07: (Đề thi HSG Tỉnh Quảng Bình - Năm học 2017 – 2018) Câu 1: (3.0 điểm) Đếm ký tự chữ số COUNT.PAS Const fi='countkt.inp'; fo='countkt.out'; Var i,j,n,dem:Longint; f:text; xau:string; Procedure doc; Begin assign(f,fi); reset(f); read(f,xau); close(f); End; Procedure Process; Begin assign(f,fo); rewrite(f); for i:=1 to length(xau) if (xau[i] in ['0' '9']) then inc(dem); write(F,dem); close(f); End; BEGIN DOC; XULY; END Câu 2: (3,0 điểm): Tổng nguyên tố Program Tong_nguyen_to; Const fi='SPRIME.inp'; fo='SPRIME.out'; Var i,n:Longint; f,g:text; Function NT(n:Longint):Boolean; Var ok: Boolean; SPRIME.PAS 322 i:Longint; Begin ok:=true; For i:=2 to n-1 if (n mod i) = then ok:=ok and false; if n>=2 then NT:=ok else NT:=false; End; Begin Assign(f,fi); Reset(f); Read(f,n); Assign(g,fo); Rewrite(g); For i:=2 to n div if (NT(i) and NT(n-i)) then Writeln(g,n,' = ',i,' + ',n-i); Close(f); Close(g); End Câu (2.0 điểm): Bộ tộc {$MODE OBJFPC} {$R+$B-} Const fi = 'clan.inp'; fo = 'clan.out'; nm = 1000000; Var a : array[1 nm] of longint; n : longint; f : text; Procedure Input; Var i:longint; Begin assign(f,fi); reset(f); readln(f,n); for i:=1 to n read(f,a[i]); close(f); End; Procedure quick_sort(dau,cuoi:longint); 323 CLAN.PAS Var chot,i,j,tg:longint; Begin if dau>=cuoi then exit; i:=dau; j:=cuoi; chot:=a[(dau+cuoi) div 2]; repeat while a[i]chot dec(j); if ij; quick_sort(dau,j); quick_sort(i,cuoi); End; Procedure process; Var i,kq,d:longint; Begin input; quick_sort(1,n); kq:=0; d:=1; for i:=1 to n if a[i]=d then Begin inc(kq); d:=1; End else inc(d); assign(f,fo); rewrite(f); writeln(f,kq); close(f); End; BEGIN PROCESS; END Câu (2.0 điểm): Chữ số thứ N NUMBER.PAS 324 Const fi ='number.inp'; fo ='number.out'; cs:array[1 8] of longint = (9,180,2700,36000,450000,5400000,63000000, 720000000); Var n : longint; f,g : text; Function num(n:longint):char; Var k, so, mu : longint; s : string; Begin k:=1; mu:=1; while (k, ] : ; Ví dụ: VAR x, y: Real; {Khai báo hai biến x, y có kiểu Real} a, b: Integer; {Khai báo hai biến a, b có kiểu integer} Chú ý: Ta v? ?a khai báo biến, v? ?a gán giá trị khởi

Ngày đăng: 11/09/2022, 09:38

w