Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 32 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
32
Dung lượng
416,5 KB
Nội dung
PHẦN I NGÔN NGỮ LẬP TRÌNH PASCAL (PHẦN CĂN BẢN) Chương CÁC YẾU TỐ CƠ SỞ CỦA NGÔN NGỮ PASCAL 1.1 Giới thiệu ngôn ngữ PASCAL PASCAL ngôn ngữ lập trình bậc cao giáo sư Niklaus Wirth trường đại học Kỹ thuật Zurich (Thụy sĩ) thiết kế công bố vào năm 1971 Ông đặt tên cho ngôn ngữ Pascal để tưởng nhớ nhà toán học tiếng người Pháp kỷ 17: Blaise Pascal, người sáng chế máy tính khí nhân loại Qua thời gian sử dụng, Pascal ngày đông đảo người dùng đánh giá cao, trở thành ngôn ngữ lập trình phổ biến Thành công ngôn ngữ Pascal chỗ: ngôn ngữ đưa thể khái niệm lập trình có cấu trúc Ý tưởng chương trình có cấu trúc xuất phát từ suy nghĩ cho chia toán lớn, phức tạp thành nhiều toán nhỏ, đơn giản Nếu toán nhỏ giải chương trình con, liên kết chương trình lại tạo nên chương trình lớn giải toán ban đầu Bằng cách chia chương trình thành chương trình vậy, người lập trình lập trình để giải riêng lẻ phần một, khối một, tổ chức để nhiều người tham gia, người phụ trách vài khối Đặc biệt phải thay đổi hay sửa chữa khối điều ảnh hưởng đến khối khác Tính cấu trúc ngôn ngữ Pascal thể việc tổ chức câu lệnh tổ chức liệu Từ lệnh có, người lập trình nhóm chúng lại với đặt hai từ khóa Begin End tạo thành câu lệnh phức tạp gọi câu lệnh ghép Đến lượt mình, hai hay nhiều lệnh ghép lại nhóm lại để tạo thành câu lệnh ghép phức tạp nữa,.v.v Tương tự thế, ngôn ngữ Pascal cho phép xây dựng kiểu liệu phức tạp từ kiểu liệu có Pascal ngôn ngữ không chặt chẽ mặt cú pháp mà chặt chẽ mặt liệu Mỗi biến, tham gia chương trình có kiểu liệu xác định nhận giá trị có kiểu liệu với Điều buộc người lập trình phải nắm cú pháp ý đến tính tương thích biểu thức mặt kiểu liệu Chính thế, lập trình ngôn ngữ Pascal hội tốt không rèn luyện tư mà rèn luyện tính cẩn thận xác 1.2 Các thành phần ngôn ngữ PASCAL Con người thể tư ngôn ngữ, khởi đầu ngôn ngữ nói sau ngôn ngữ viết Mỗi dân tộc dùng số ký tự khác cho ngôn ngữ viết mình, điều không ngoại lệ với ngôn ngữ lập trình Ngôn ngữ Pascal có ký tự quy tắc riêng để hình thành nên từ khóa, tên chuẩn câu lệnh 1.2.1 Bộ ký tự Bộ ký tự Pascal chủ yếu giống ký tự ASCII, chúng gồm nhóm sau: - Nhóm 26 chữ in: A, B, C, Z - Nhóm 26 chữ thường: a, b, c, z - Nhóm chữ số hệ đếm thập phân: 0,1,2,3,4,5,6,7,8,9 - Nhóm toán tử toán học: +,-,*,/,>,=, 1.7*10+38 không biểu diễn x máy được, | x| < 2.9*10-39 x coi Có hai cách biểu diễn số thực: - Cách (Biểu diễn dạng dấu phẩy tỉnh): Viết bình thường, dấu phẩy thập phân thay dấu chấm thập phân, ví dụ như: 18.6 có nghĩa 18,6 - Cách (Biểu diễn dạng dấu phẩy động): 1.257E+01 (có giá trị = 1.257*101 = 12.57 ) 1257.0E-02 (có giá trị = 1257*10-2 = 12.57 ) Trong dạng số gồm có hai phần, phần đứng trước E gọi phần định trị, viết theo cách 1, phần đứng sau E gọi phần bậc, gồm dấu cộng trừ, tiếp đến số nguyên Số viết theo cách gọi số có dấu chấm thập phân cố định, số viết theo cách gọi số có dấu chấm thập phân di động hay số dạng khoa học (Scientific) Tên kiểu Real Single Double Extended Comp Phạm vi giá trị 2.9*10-39 1.7*1038 1.5*10-45 3.4*1038 5.0*10-324 1.7*10308 3.4*10-4932 1.1*104932 -9.2*1018 9.2*1018 Số byte 10 Chú ý: Turbo Pascal thường làm việc với kiểu Real Muốn dùng kiểu thực lại, phải chuyển sang mode 8087 cách viết thị {$N+} đầu chương trình 2.1.2.2 Các phép toán Phép toán Trong toán học Các phép toán số học + (cộng), - (trừ), x (nhân), : (chia) với số thực Trong Pascal +, -, *, / 2.1.2.3 Các hàm thủ tục có đối số nguyên thực - Thủ tục Inc(i,h): Thủ tục có chức tương đương với câu lệnh gán i:=i+h, với i, h số nguyên kết trả lại có kiểu nguyên - Thủ tục Dec(i,h): Thủ tục có chức tương đương với câu lệnh gán i:=i-h, với i, h số nguyên kết trả lại có kiểu nguyên Trong thủ tục có tham số i ngầm định h (viết Inc(i) thay cho Inc(i,1); Dec(i) thay cho Dec(i,1)) - Hàm Abs(x): tính trị tuyệt đối x Kiểu liệu kết qủa kiểu với đối số Nếu x nguyên Abs(x) nguyên, x số thực Abs(x) số thực - Hàm Sqr(x): tính bình phương x Kiểu liệu kết qủa kiểu với đối số - Trong hàm đây, đối số x nguyên hay thực, giá trị trả luôn kiểu thực: Hàm Sqrt(x): tính bậc x (x >= 0), kết trả lại số thực Hàm Exp(x): tính e mũ x, kết trả lại số thực Hàm Ln(x): tính lnx, (x > 0), kết trả lại số thực Các hàm Sin(x), Cos(x), Arctan(x): tính sinx, cosx arctgx - Hàm Int(x) : cho số thực phần nguyên x Ví dụ 2.1: Int(12.55) = 12.0 - Hàm Frac(x) : cho số thực phần lẻ x Ví dụ 2.2: Frac(12.55) = 0.55 - Hai hàm đặc biệt cho kết qủa số nguyên: - Hàm Trunc(x): cho số nguyên phần nguyên x Ví dụ 2.3: Trunc(-2.98) = -2 - Hàm Round(x): cho số nguyên cách làm tròn x Ví dụ 2.4: Round(-2.98) = -3 Chú ý: Hàm Int(x) hàm Trunc(x) cho phần nguyên x, chúng khác kiểu liệu giá trị trả về: Int(4.5)= 4.0 Trunc(4.5) = (viết hiểu số nguyên, viết 4.0 hiểu số thực) 2.1.3 Kiểu ký tự (Char) Các hàm liên quan đến ký tự - Hàm Pred(ch): cho ký tự đứng trước ký tự ch bảng mã ASCII Ví dụ 2.5: Pred(‘B’)=‘A’ - Hàm Succ(ch): cho ký tự đứng sau ký tự ch bảng mã ASCII Ví dụ 2.6: Succ(‘A’)=‘B’ - Hàm UpCase(ch): đổi ký tự ch thành chữ hoa tương ứng Ví dụ 2.7: Upcase( ‘a’ ) = ‘A’ - Hàm Ord(ch) : cho mã ký tự ch Ví dụ 2.8: Ord (‘A’) = 65, Ord (‘a’) = 97 - Hàm Chr(k) : đối số k nguyên, 0 2) or Not ( 51.25 < 50) = False or Not False = False or True = True 2.1.5.5 Câu lệnh Các câu lệnh viết phần thân chương trình, câu lệnh bao gồm câu lệnh đơn câu lệnh ghép Câu lệnh ghép tập hợp câu lệnh đơn đặt hai từ khóa ‘Begin’ ‘End;’ Câu lệnh nhằm thực công việc mà người lập trình đặt cho máy xử lý Việc bố trí câu lệnh dòng hay nhiều câu lệnh dòng tùy cách trang trí người lập trình miễn câu lệnh phải đặt cách dấu phân cách “;” Việc thực câu lệnh đơn câu lệnh ghép thực câu lệnh ghép theo tuần tự, lệnh viết trước thực trước Như ta biết cuối câu lệnh có dấu ‘;’, riêng câu lệnh đứng trước từ khóa ‘End’ không cần có dấu ‘;’ 2.1.5.6 Câu lệnh gán Lệnh gán lệnh hay dùng ngôn ngữ lập trình PASCAL Cú pháp: :=; Thực hiện: Tính giá trị biểu thức bên phải dấu gán ‘:=’ ghi giá trị vào địa biến có tên bên trái dấu gán ‘:=’, tức gán giá trị cho biến Chú ý: Kiểu biểu thức phải phù hợp với kiểu tên biến Ví dụ 2.16: Sau thực lệnh gán sau giá trị biến x, y, z bao nhiêu? 1) x:=1; 2) y:=2; 3) z:=3; 4) x:=x+1; {Tăng giá trị biến x lên đơn vị ≈ thủ tục Inc(x)} 5) y:=y-1; {Giảm giá trị biến y xuống đơn vị ≈ thủ tục Dec(y)} 6) x:=x+y+z; 7) y:=y+z-x; 8) z:=x+y-z; Giải thích ý nghĩa thực câu lệnh: Câu lệnh 1, 2, 3: Thực gán giá trị 1, 2, cho biến tương ứng x, y, z (giá trị x 1, giá trị y 2, giá trị z 3) Câu lệnh 4: Thực tính giá trị biểu thức bên phải dấu gán giá trị 2, lấy giá trị gán cho biến x (giá trị x 2) Câu lệnh 5: Thực tính giá trị biểu thức bên phải dấu gán giá trị 1, lấy giá trị gán cho biến y (giá trị y 1) Câu lệnh 6: Thực tính giá trị biểu thức bên phải dấu gán giá trị 6, lấy giá trị gán cho biến x (giá trị x 6) Câu lệnh 7: Thực tính giá trị biểu thức bên phải dấu gán giá trị -2, lấy giá trị gán cho biến y (giá trị y -2) Câu lệnh 8: Thực tính giá trị biểu thức bên phải dấu gán giá trị 1, lấy giá trị gán cho biến z (giá trị z 1) Trả lời: Sau thực câu lệnh gán giá trị x 6,giá trị y -2, giá trị z Chú ý: - Khi gán giá trị phải đảm bảo tính tương thích kiểu liệu giá trị gán, ví dụ khai báo biến x kiểu Integer gán cho giá trị 6.5 - Trong câu lệnh gán có ngoại lệ biến kiểu thực nhận giá trị nguyên BÀI TẬP Tên kiểu liệu giới thiệu chương thay đổi với ý nghĩa khác hay không? Tại bảng mã ASCII lại có 256 ký tự Sự giống khác hai kiểu liệu Integer Word Một lớp học sinh có không 50 học sinh, nên dùng kiểu liệu để đánh số thứ tự Để gán giá trị 6, 2.5, ‘A’ cho biến x, y, z biến x, y, z phải thuộc kiểu liệu nào? Viết câu lệnh gan Có thể gán ký tự ‘ă’, ‘â’, ‘ô’, ‘ê’, ‘ư’ cho biến kiểu Char hay không? Có biểu thức loại gì? Biểu thức có phải câu lệnh hay không? Có thể gán giá trị cho khai báo hay không? 10 x:=Wherex, y:=Wherey sau mà số N nhập vào không thỏa mãn yêu cầu di chuyển trỏ hình đến vị trí có tọa độ x, y (là vị trí sau dấu ‘:’ mà ghi nhận trước đó) lệnh Gotoxy(x,y), xóa văn từ vị trí trỏ hình đến cuối dòng lệnh Clreol sau thực lệnh nhập số N từ bàn phím lệnh Readln(N) Ví dụ 4.4: Tính tổng S=1+1/2+1/3+ +1/n Biết n số nguyên dương nhập vào từ bàn phím Program Tinhtong; Uses Crt; Var i, n: Integer; s: Real; c:Char; Begin Repeat ClrScr; Write('Nhap n= '); Readln(n); s:=0; i:=1; While i’B’, , ‘z’>’Z’ - Hai xâu ký tự gọi khác số ký tự hai xâu ký tự khác có hai ký tự có thứ tự hai xâu ký tự khác Nếu s1, s2 hai xâu ký tự có độ dài khác n1 n2 (n2>n1), xâu ký tự s1 giống n1 ký tự đầu xâu ký tự s2 xâu ký tự s2 lớn xâu ký tự s1 29 - Khoảng trống từ xem ký tự để so sánh (mã ASCII phím SPACE (phím khoảng trống) 32) 5.2.4 Các thủ tục hàm xử lý xâu ký tự 5.2.4.1 Hàm xác định độ dài xâu ký tự: Length(): cho kết số nguyên độ dài xâu ký tự Ví dụ 5.17 : Length(‘ABCD’)=4 xâu ‘ABCD’ có ký tự Xâu rỗng có độ dài 5.2.4.2 Thủ tục xóa xâu ký tự Delete(,n1,n2); n1, n2 số nguyên dương Thủ tục xóa xâu ký tự n2 ký tự ký tự thứ n1 kéo sang bên phải Ví dụ 5.18: s:=’Hoc Tin hoc’; Sau thực thủ tục Delete(s,1,4) xâu ký tự s xâu ‘Tin hoc’ 5.2.4.3 Thủ tục chèn xâu ký tự Insert(,,n); Thủ tục chèn xâu ký tự vào xâu ký tự kể từ vị trí thứ n Ví dụ 5.19: s1:=’Tin ’; s2=’Hoc hoc’; Sau thực thủ tục Insert(s1,s2,5) cho kết qủa xâu ký tự ‘Hoc Tin hoc‘ 5.2.4.4 Thủ tục chuyển số thành xâu ký tự Str([: [:]], ); Thủ tục chuyển đổi số nguyên thực thành xâu ký tự biểu diễn số (các tham số cặp dấu [ ] có không) Các tham số thủ tục bao gồm: - Độ rộng: Quy định số chữ số chuyển thành ký tự + Nếu độ rộng nhỏ số chữ số có chuyển toàn số thành ký tự + Nếu độ rộng lớn số chữ số có chuyển chữ số thành phần tử xâu ký tự theo chiều từ phải qua trái, phần tử thừa bỏ trống - Số số lẻ: Chỉ áp dụng cho số thực - Tên biến xâu ký tự: Là tên biến xâu ký tự chứa ký tự chuyển Ví dụ 5.20: Str(1234,s); Thủ tục chuyển số 1234 thành xâu ký tự s Xâu ký tự có độ dài chứa ký tự ‘1234’ Str(1234:7,s); Thủ tục chuyển số 1234 thành xâu ký tự s có ký tự Các phần tử xâu ký tự s bố trí sau: Byte Byte Byte Byte Byte Byte Byte Byte Byte số chứa ký tự thể độ dài xâu ký tự, ký tự không viết hình nên không thấy chúng Ví dụ 5.21: Đổi số x1, x2 thành xâu ký tự viết chúng hình Program Chuyenso; Uses Crt; Var x1:Integer; x2:Real; 30 ten1, ten2, ten3:String[20]; Begin Clrscr; x1:=1234; x2:=123.456789; Str(x1:15,ten1); {Chuyển số x1 thành xâu ký tự ten1 có độ dài 15 ký tự} Writeln(ten1); Str(x2:7:3,ten2);{Chuyển số x2 thành xâu ký tự ten2 có độ dài với ký tự sau dấu chấm thập phân} Writeln(ten2); Str(123456:10,ten3); Writeln(ten3); Readln; End 5.2.4.5 Hàm chép ký tự xâu ký tự Copy(St,m,n): chép n ký tự xâu ký tự St kể từ vị trí m Ví dụ 5.22: St:=’Hoc tap’; S1:=Copy(St,5,3); {Kết cho s1=’tap’} Chú ý: - Nếu m>Length(St) hàm Copy(St,m,n) cho giá trị xâu ký tự rỗng - Nếu n+m>Length(St) hàm Copy(St,m,n) cho giá trị ký tự nằm xâu ký tự St 5.2.4.6 Hàm ghép xâu ký tự Concat(St1,St2, ,Stn): ghép nối tất xâu ký tự St1,St2, ,St3 thành xâu ký tự theo thứ tự viết Nếu tổng độ dài xâu St1,St2, ,St3 vượt 255 xâu giữ lại 255 ký tự Ví dụ 5.23: St1=’Thu ’; St2=’Ha Noi’; St:=Concat(St1,St2); Kết St ‘Thu Ha Noi’ 5.2.4.7 Hàm cho biết vị trí ký tự xâu ký tự xâu ký tự khác Pos(s1,St): cho biết vị trí ký tự xâu ký tự s1 xâu ký tự St Nếu không tìm thấy hàm cho giá trị Ví dụ 5.24: St=’1234abcd’; s1:=’234’; s2:=35ab’; Pos(s1,St) cho giá trị Pos(s2,St) cho giá trị 5.2.4.8 Thủ tục chuyển xâu ký tự thành số Val(St,x,m); Thủ tục chuyển xâu ký tự St (biễu diễn số nguyên số thực) thành số nguyên số thực, số chứa biến x Tham số m số nguyên chứa mã lỗi, phép chuyển đổi m=0, chuyển đổi sai m cho giá trị vị trí ký tự sai Ví dụ 5.25: Program Thutuc_val; Uses Crt; Var 31 x1:Real; x2,m:Integer; c1,c2,c3:String[30]; Begin Clrscr; c1=’1234.567’; c2:=’1234’; c3:=’123abc’; Val(c1,x1,m); If m=0 then Writeln(‘Chuyen xau c1 so thuc x1=’,x1:10:3) Else Writeln(‘Khong chuyen duoc, loi tai vị tri ‘,m); Val(c1,x2,m); If m=0 then Writeln(‘Chuyen xau c1 so nguyen x2=’,x2) Else Writeln(‘Khong chuyen xau c1 so nguyen, loi tai vị tri ‘,m); Val(c2,x2,m); If m=0 then Writeln(‘Chuyen xau c2 so nguyen x2=’,x2) Else Writeln(‘Khong chuyen duoc, loi tai vị tri ‘,m); Val(c3,x2,m); If m=0 then Writeln(‘Chuyen xau c3 so nguyen x2=’,x2) Else Writeln(‘Khong chuyen xau‘,c3,’ so duoc’, loi tai vị tri ‘,m); Readln; End Khi chạy chương trình ta nhận kết quả: Chuyen xau c1 so thuc x1=1234.567 Khong chuyen c1 so nguyen, loi tai vi tri Chuyen xau c2 so nguyen x2=1234 Khong chuyen xau 123abc so duoc, loi tai vi tri BÀI TẬP Lập chương trình tính tổng bình phương tổng lập phương N (N≤15) số nguyên N nhập vào từ bàn phím Cho dãy số thực A gồm n sô a1, a2,…,an nhập vào từ bàn phím a Hãy đếm xem có số dương, số âm b Cho số thực x, đếm xem dãy số A có phần tử x, vị trí phâng tử c Tìm phần tử nhỏ nhất, lớn Cho ma trận chữ nhật A kích thước MxN Lập chương trình xây dựng ma trận B ma trận chuyển vị ma trận A Điều kiện để B ma trận chuyển vị ma trận B A[i,j]=B[j,i] (1≤i≤M, 1≤j≤N) Lập chương trình nhập xâu ký tự vào từ bàn phím, cho ký tự tùy ý (ký tự thường), đếm xem xâu ký tự nhập có ký tự thường giống với ký tự cho Xâu ký tự s1 nhập từ bàn phím, xây dựng xâu ký tự s2 xâu ký tự đảo xâu ký tự s1 Ví dụ: s1=’abcde’ s2=’edcba’ Nhập vào xâu ký tự s1 câu không 70 ký tự, tìm xem từ dài ngắn từ nào, độ dài từ (từ dãy ký tự viết liền cách dãy ký tự khác ký tự trống) 32 [...]... s:= Hoc Tin hoc ; Sau khi thực hiện thủ tục Delete(s,1,4) thì xâu ký tự s sẽ là xâu ‘Tin hoc 5.2.4.3 Thủ tục chèn xâu ký tự Insert(,,n); Thủ tục này sẽ chèn xâu ký tự vào xâu ký tự kể từ vị trí thứ n Ví dụ 5.19: s1:=’Tin ’; s2= Hoc hoc’; Sau khi thực hiện thủ tục Insert(s1,s2,5) sẽ cho kết qủa là xâu ký tự Hoc Tin... 1024/768 3.1 Nhập dữ liệu Các đại lượng thường phải nhập dữ liệu là hằng, biến Có hai cách nhập dữ liệu là nhập trực ti p bằng lệnh gán ( :=) và nhập bằng cách gõ số liệu từ bàn phím Có hai thủ tục chuẩn của Turbo Pascal để nhập dữ liệu vào từ bàn phím : Read( ) và Readln( ) 3.1.1 Thủ tục Read( ) và Readln( ) Thủ tục Read được sử dụng để đọc dữ liệu từ tệp ra biến hoặc nhập dữ liệu từ bàn phím vào... ‘+’ để ghép hai xâu ký tự Ví dụ: s1:=’Tin ‘; s2:= hoc ; s:=s1+s1; Khi đó xâu ký tự s sẽ là:’Tin hoc 5.2.3.4 So sánh hai xâu ký tự Hai xâu ký tự được gọi là bằng nhau nếu chúng có độ dài bằng nhau và các ký tự có cùng vị trí trong hai xâu ký tự giống nhau Việc so sánh hai xâu ký tự được bắt đầu từ ký tự đầu ti n bên trái, nếu giống nhau thì so sánh ký tự thứ 2, , cứ ti p tục như vậy cho tới ký tự cuối... giá trị a là giá trị bất kỳ được nhập từ bàn phím Ta lấy giá trị a là giá trị canh chừng để dừng vòng lặp Thực hiện như sau: i) Dữ _liệu_ vào := giá _trị_đầu _ti n; ii) While dữ _liệu_ vào