Giáo trình Pascal
PASCAL là ngôn ngữ lập trình cấp cao do giáo s-Niklaus Wirth thuộc tr-ờng đại học kỹ
thuật Zurich Thuỵ sĩ sáng tác và công bố vào đầu những năm 1970, với tên là PASCAL để kỹ
niệm nhà toán học ng-ời Pháp Blaise PASCAL ở thế kỷ 17.
PASCAL là một ngôn ngữ có định kiểu mạnh mẽ. Điều đó có nghĩa là mọi biến và hằng của
một kiểu dữ liệu không thể tự do đem trộn lẫn với các biến và hằng của một kiểu dữ liệu khác .
PASCAL là một ngôn ngữ có cấu trúc. Tính cấu trúc đó đ-ợc thể hiện trên các mặt sau :
+ Cấu trúc về dữ liệu : Từ các dữ liệu đã có tacó thể xây dựng các cấu trúc dữ liệu phức tạp
hơn.
+ Cấu trúc về lệnh : Từ các lệnhđã có ta có thể nhóm chúng lạI với nhau và đặt giữa hai từ
khoá Begin và End thành câu lệnh phức tạp hơn.
+ Cấu trúc về ch-ơng trình : Một ch-ơng trình có thể chia thành các modun ch-ơng trình độc
lập (ch-ơng trình con).
Ngay_tuan: set of ngay; Ví dụ : Nhập vào n ký tự để xây dựng một tập các ký tự: Program XD_CHU; Uses CRT; Var Chu : SET OF ‘A’ .. ‘Z’; I, n: integer; Ch: Char; Begin Clrscr; Chu: =[ ]; Write(‘Nhap n:=’); readln(n); For I:= 1 to n do Begin Readln(ch); Ch:= Upcase(ch); {đổi chữ th−ờng thành hoa} End; For ch:=’A’ to ‘Z’ do If ch IN chu then write(ch); End. Ch−ơng VI Kiểu Xâu Ký Tự I. KháI niệm: Xâu( String ) là kiểu dữ liệu có cùng cấu trúc dùng để xử lý các xâu ký tự. Kiểu String có nhiều đIểm t−ơng tự nh− kiểu mảng nh−ng cũng có nhiều đIểm khác nhau là: số ký tự trong một biến xâu có thể thay đổi còn số phần tử của kiểu mảng luôn cố định. Trung tỏm tờnh toaùn thọỳng kó Âaỡ Nàụng 54 - Trỏửn Quọỳc Toaớn Âaỡ Nàụng Giaùo trỗnh Pascal 13 II. Khai báo: Var Biến : String[ n ]; Trong đó n là số ký tự tối đa có thể có của xâu. Chiều dàI tối đa của một xâu là 255. Ví dụ: Var Hoten: string[30]; St: string; III. Các thủ tục và hàm xử lý xâu ký tự: 1. Các thủ tục: a. Delete(St, Pos, Num); :dùng để xoá xâu St . Trong đó St: xâu ký tự, Pos: là vị trí bắt đầu xoá,Num: là số ký tự cần xoá. Ví dụ: Nếu St=’Tin hoc’ thì: Delete(St,4,4); -> St=’Tin’ b. Insert(St2, St1, Pos); : Dùng để chèn xâu St2 vào xâu St1 ở vị trí Pos. Ví dụ: Nếu St1=’Trung ‘ ; St2=’Tam’ thì: Insert(St2,St1,6); -> St1=’Trung Tam’; c. Str(Value, St); : dùng để đổi giá trị số Value thành xâu St. Ví dụ: Nếu I=234 thì: Str(I, St); -> St=’ 234’; d. Val(St, Var, Code); :dùng để đổi xâu St thành số rồi l−u vào biến Var. Nếu đổi thành công thì Code = 0 ,còn không thì ng−ợc lại. Ví dụ: Nếu St= ‘ 456’ thì: Val(St, I, cd); -> I= 456 và cd = 0; 2. Các hàm: a. Length(St): cho ta độ dàI của xâu St. Ví dụ: Nếu St=’adecs12vf’ thì dd:=Length(St); cho kết quả dd= 9. b. Copy(St, Pos, Num); : dùng để tạo ra một xâu mới từ xâu St , hàm này sẽ chép ra số ký tự từ vị trí Pos và chép ra Num ký tự. Ví dụ: Nếu St =’kuioj’ thì: Stm:= Copy(st,4,2); cho kết quả Stm=’oj’; Chú ý: -Nếu Pos+ Num > Length(St) thì hàm sẽ trả về các ký tự trong xâu St . -Nếu Pos > Length(St) thì hàm sẽ trả về một xâu rỗng . c. Concat(St1, St2,.., Stn); : hàm này dùng để ghép tất cả các xâu ký tự thành một xâu. Nếu tổng chiều dàI xâu mới >255 thì máy báo lỗi. Ví dụ: Nếu st1=’Cong’ ; st2=’hoa’ thì: { ta có thể sử dụng phép + } St := Concat(st1+’ ‘, st2); cho kết quả St=’Cong hoa’ d. Pos(St1, St2); dùng để tìm vị trí xuất hiện đầu tiên của xâu St1 có trong xâu St2. Nếu tìm thấy thì hàm này sẽ trả về giá trị nguyên >0, còn không tìm thấy thì Pos= 0 . Ví dụ: Nếu St1= ‘as’; St2=’ aeasnhasju’ thì: vt:= Pos(St1, St2); cho kêt quả vt= 3 . Ví dụ: Xoá các ký tự trắng d− thừa trong xâu St :{ St= ’ Xa hoi ‘ ; } Program Xoa_Trang; Uses CRT; Var St: string; I: byte; Begin Clrscr; Write(‘Nhap xau ky tu:’); readln(st); While st[1]=’ ‘ do delete(St,1,1); { xoá đầu } While st[length(st)]=’ ‘ do delete(St, length(st),1); { xoá cuối } For I:= 1 to length(st) do If st[I] and st[I+1] then delete(St, I, 1); Trung tỏm tờnh toaùn thọỳng kó Âaỡ Nàụng 54 - Trỏửn Quọỳc Toaớn Âaỡ Nàụng Giaùo trỗnh Pascal 14 Readln; End. Ví dụ: Viết hàm chuyển chữ hoa thành chữ th−ờng: Function Hoa_Thuong (St : string): string; Var I: byte; Begin For I:= Length(st) do If st[I] In [‘A’ .. ‘Z’] then St[I]:= Chr(Ord(St[I]+ 32); Hoa_thuong:= st; End; Ch−ơng VII. Kiểu Bản Ghi I. Kiểu bản ghi( RECORD ) : là kiểu dữ liệu có cấu trúc nhằm để tạo ra một kiểu dữ liệu mới với các phần tử dữ liệu có kiểu khác nhau . RECORD là một cấu trúc bao gồm nhiều thành phần. Các thành phần có thể thuộc các kiểu dữ liệu khác nhau và đ−ợc gọi là các tr−ờng ( Field ), mỗi tr−ờng đều đ−ợc đặt tên . Để mô tả một kiểu T có cấu trúc Record với danh sách các tr−ờng có tên là S1, S2, …, Sn và có các mô tả kiểu t−ơng ứng là tr−ờng có tên là T1, T2, …, Tn ta dùng cách viết nh− sau: Type T= Record S1: T1; S2: T2; …. Sn: Tn; End; Ví dụ: Type Date = Record Ngay: 1 .. 31; Thang: 1.. 12; Nam: Word; End; Type NhanSu = Record Hoten: string[30]; Ngaysinh: Date; Luong: real; CoGiaDinh: Boolean; End; Var NV: Array[1 ..100] of NhanSu; II. Sử dụng Record: Muốn truy cập một biến kiểu Record, ta phảI truy cập theo thành phần của chúng. Cú pháp để truy cập đến một thành phần nào đó là: . Ví dụ: Var NVV : NhanSu; NVV.Hoten:=’Tran An’; NVV.Ngaysinh.Ngay:= 6; Trung tỏm tờnh toaùn thọỳng kó Âaỡ Nàụng 54 - Trỏửn Quọỳc Toaớn Âaỡ Nàụng Giaùo trỗnh Pascal 15 NVV.Ngaysinh.Thang:= 5; NVV.Ngaysinh.Nam:= 1980; III. Câu lệnh With: Khi cần truy cập nhiều thành phần của một biến kiểu Record, ta có thể dùng câu lệnh With để ch−ơng trình đ−ợc gọn hơn . Cú pháp: WITH DO Ví dụ: Nhập lý lịch nhân viên trong mộ cơ quan : Uses CRT; Type Date = Record Ngay: 1 .. 31; Thang: 1.. 12; Nam: Word; End; Type NhanSu = Record Hoten: string[30]; Ngaysinh: Date; Luong: real; Cogiadinh: Boolean; End; Var NV: Array[1 ..100] of NhanSu; I, SNV: byte; GD: Char; Begin Clrscr; Write(‘Nhap vao so nhan vien:’); readln(SNV); For I:= 1 to SNV do With NV[I] do Begin Write(‘Ho ten:’); readln(hoten); Write(‘Ngay sinh: / /’); { Nếu không có With thì: readln(NV[I].hoten); } With Ngaysinh do Begin Readln(ngay); Readln(thang); Readln(nam); End; Write(‘Luong:’); Readln(luong); Write(‘Co gia dinh(Y/N)?:’); readln(GD); If Upcase(GD)= ‘Y’ then Cogiadinh:= true Else Cogiadinh:= false; End; Readln; End. IV. Bản ghi có cấu trúc thay đổi: NgoàI những bản ghi có cấu trúc cố định nh− đã trình bày. Pascal còn cho phép lập các Record có một phần cấu trúc thay đổi đ−ợc. Trung tỏm tờnh toaùn thọỳng kó Âaỡ Nàụng 54 - Trỏửn Quọỳc Toaớn Âaỡ Nàụng Giaùo trỗnh Pascal 16 Ví dụ : Trong phần khai báo NhanSu ở ví dụ tr−ớc , nếu ta xét thêm tr−ờng Nghenghiep thì sẽ có nhiều tr−ờng hợp xảy ra, chẳng hạn nh− : - Công nhân: Cần ghi rõ ngành gì? Bậc thợ mấy? - Kỹ s−: Ngành gì? Trình độ? - Bác sĩ: Chuyên khoa gì? - Cá biệt: Không có gì nữa? Type Nghe= (Congnhan, Kysu, Bacsi, Cabiet); Nganh= (Khaithac, Cokhi, Dien,Hoa); Khoa= (Noi, Ngoai, Nhi); NhanSu = Record Hoten: string[30]; Ngaysinh: Record {Kiểu khai báo mới} Ngay: 1..31; Thang: 1..12; Nam: Word; End; Luong: real; Cogiadinh: Boolean; CASE Nghenghiep: Nghe Of Congnhan: (NganhCN: Nganh; Bactho:byte); Kysu:(NganhKS:Nganh;Trinhdo:(Kem,TB,Kha,Gioi); Bacsi: (Chuyenkhoa: Khoa); Cabiet: ( ); End; End; Var NVV: NhanSu; Begin ….. With NVV do Begin Hoten: =’Tran An’ Nghenghiep:= Congnhan; NganhCN:= Cokhi; Bactho:= 3; End; ….. ….. End. Ch−ơng VIII. Dữ Liệu Kiểu Tệp I. KháI niệm: Tệp dữ liệu( File ) là một tập hợp các dữ liệu có liên quan với nhau và có cùng kiểu đ−ợc nhóm lạI với nhau tạo thành một dãy. Chúng th−ờng đ−ợc chứa trong một thiết bị nhớ ngoài của máy tính( đĩa cứng,..)với một cáI tên nào đó. Tệp có các dữ liệu khác nhau nh− ký tự, văn bản… Định nghĩa một kiểu tệp T với các phần tử có kiểu phần tử đ−ợc viết trong mô tả kiểu với từ khoá File Of nh− sau: Type Filereal = File of real; Date = Record Ngay: 1 .. 31; Trung tỏm tờnh toaùn thọỳng kó Âaỡ Nàụng 54 - Trỏửn Quọỳc Toaớn Âaỡ Nàụng Giaùo trỗnh Pascal 17 Thang: 1.. 12; Nam: Word; End; Type NhanSu = Record Hoten: string[30]; Ngaysinh: Date; Luong: real; CoGiaDinh: Boolean; End; FnhanSu = File Of NhanSu; Var F1: Filereal; F2: FNhanSu; F3: File of Array[1..50] of Integer; II. Các thao tác trên tệp: 1. Mở tệp mới để cất dữ liệu: Việc mở tệp đ−ợc tiến hành với hai thủ tục đI liền nhau theo thứ tự : Assign(FileVar, FileName); ReWrite(FileVar); Trong đó: - FileVar : biến kiểu File. - FileName : tên của tệp đặt trong thiết bị nhớ ngoàI đ−ợc đ−a vào dạng một String. Ta nên đặt tên sao cho tên đó phản ánh đ−ợc ý nghĩa, bản chất, nội dung của tệp. Ví dụ: Assign(F2, ‘Nhanvien.txt’); { Gán tên Nhanvien.txt cho biến F2 } ReWrite(F2); { Mở tệp Nhanvien.txt, tệp ch−a có phần tử nào } 2. Ghi các giá trị vào tệp với thủ tục Write: Thủ tục Write sẽ đặt các giá trị mới vào tệp. Cú pháp: Write(FileVar, Item1, Item2,.., Itemn); Trong đó Item1, Item2,..,Itemn: là các giá trị cần ghi vào tệp. Ví dụ: Tạo ra một tệp chứa các số nguyên từ 1 đến 50 với tên tệp trên đĩa là: ‘Songuyen.txt’ Program Tep_so_nguyen; Var I: byte; F: File of Integer; Begin Assign(F,’Songuyen.txt’); ReWrite(F); For I:= 1 to 50 do Write(F,I); Close(F); { Thủ tục đóng File } End. 3. Đọc dữ liệu từ một tệp đã có: Cú pháp: Assign(FileVar, FileName); Reset(FileVar); Để đọc dữ liệu từ tệp ra biến nào đó ta dùng thủ tục Read : Cú pháp: Read(FileVar, Var1, Var2,.., Varn); hoặc Readln(…); Trong đó Var1, Var2,.., Varn là các biến có cùng kiểu với FileVar Ví dụ: Đọc nội dung từ file ‘Vanban.txt’ : Trung tỏm tờnh toaùn thọỳng kó Âaỡ Nàụng 54 - Trỏửn Quọỳc Toaớn Âaỡ Nàụng Giaùo trỗnh Pascal 18 Program Doc_File; Uses CRT; Var F: Text; { Đây là khai báo kiểu File Text } dong : string[80]; Begin Clrscr; Assign(F, ‘Vanban.txt’); Reset(F); While Not EOF(F) Do Begin Read(F, dong); Write(dong,’ ‘ ); End; Close(F); Readln; End. 4. Thủ tục thêm dòng: Cú pháp: Append(Var F: Text); Ví dụ: … Assign(F,’Vanban.txt’); Append(F); Write(F,’Tạm biet’);... Ghi chú : - Cuối ch−ơng trình khi nào cũng nhớ dùng thủ tục Close(biến_file) để đóng File. - Hàm EOF(Var F: Text): cho biết vị trí con trỏ có phảI là cuối File hay ch−a. - Hàm EOLN(Var F: Text): cho biết vị trí con trỏ có phảI là cuối dòng hay ch−a. Hai hàm trên đều trả về kiểu Boolean.
File đính kèm:
- Giáo trình Pascal.pdf