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).

pdf18 trang | Chuyên mục: Pascal | Chia sẻ: dkS00TYs | Lượt xem: 1925 | Lượt tải: 5download
Tóm tắt nội dung Giáo trình Pascal, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
 
 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:

  • pdfGiáo trình Pascal.pdf