Các hàm và thủ tục trong Pascal

Bài 1:

Các hàm và thủ tục trong Pascal

Yêu cầu: Dùng các phím F1, Alt F1, Ctrl + F1 xem cấu trúc và các thông số

đầu vào của từng lệnh trong Pascal và ghi vào dòng phía dưới của các câu

lệnh.

Ví dụ:

- Window Tạo một cửa sổ màn hình mới

) Procedure Window (X1,Y1,X2,Y2:Byte);

Bạn có thể Copy các ví dụ của Pascal và thử chạy nó để hiểu rõ hơn về cách

sử dụng của các hàm và các thủ tục.

I. Một số Unit hay dùng trong Pascal for DOS

Khi sử dụng một Unit nào đó bạn cần phải khai báo tên Unit sau từ khoá uses. Các

Unit có thể đã được Pascal tạo trước đó hoặc do chính bạn định nghĩa.

pdf23 trang | Chia sẻ: gaobeo18 | Lượt xem: 1772 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Các hàm và thủ tục trong Pascal, để xem tài liệu hoàn chỉnh bạn click vào nút TẢI VỀ ở trên
g; vitri:integer; Sotu:Integer):String; 
Hàm Copy cho một chuỗi ký tự con của chuỗi st. chuỗi này được lấy từ vitri với Sotu. 
Ví dụ: 
 St:=’Turbo Pascal’; 
 st1:=Copy(st,7,6); 
khi đó st1 có giá trị Pascal; 
+ Xoá một chuỗi trong một chuỗi: 
Hàm Delete(Var St:string;Vitri,sotu:integer); 
Xoá khỏi chuỗi st sotu trừ vitri còn lại sẽ gắn trở lại chuỗi cho biến St; 
Ví dụ: St:=Turbo Pascal; 
 Delete(st,7,6); 
 Writeln(st); {câu lệnh này hiện nội dungTurbo} 
+ Chèn chuỗi con vào trong chuỗi: 
Thủ tục: insert(chuoicon:String; Var st:string; Vitri:integer); 
Chèn Chuoicon vào chuỗi st bắt đầu từ Vitri. 
Ví dụ: St:=Tin hoc tre; 
 Chuoicon:=’ECS ‘; 
 insert(Chuoicon,st,1); 
 Writeln(st); {nội dung của st là ECS Tin hoc tre} 
* Chuyển đổi giữa số và chuỗi: 
 + Ðổi một số thành chuỗi hàm Str 
Vietebooks Nguyễn Hoàng Cương 
Trang 18 
 + Ðổi một chuỗi thành số: hàm Val 
c. Các giải thuật cơ bản trên dữ liệu kiểu String: 
( Ðổi chuỗi ký tự sang ký tự in 
Var i:byte 
 st:string; 
đoạn chương trình: 
 For i:=1 to length(st) do St[i]:=Upcase(st[i]); 
( Cắt ký tự trắng bên trái chuỗi ký tự: 
Ví dụ chuối  Turbo Pascal có một số ký tự trắng bên trái bạn có thể xoá nó 
để đưa về chuỗi Turbo Pascal bạn bắt đầu tìm từ vị trí đầu tiên của chuỗi, kiểm 
tra xem có phải là một ký tự trắng hay không nếu đúng xác định vị trí và xoá ký tự 
trắng đó khỏi dãy. 
Var i:byte; 
 st:string; 
Ðoạn chương trình: 
i:=1; 
While st[i]=#32 do inc(i); {#32 là ký tự trắng  } 
Delete(st,1,i-1); 
( Cắt ký tự trắng bên phải: 
Bạn dùng vòng While ... do với điều kiện còn tìm thấy ký tự trắng nhưng bắt đầu từ 
vị trí cuối cùng ngược tới vị trí đầu. 
Var i:byte; st:string; 
Ðoạn chương trình: 
i:=length(st); 
while st[i]=#32 then dec(i); 
st[0]:=Chr(i) 
( Cắt các khoảng trắng ở giữa chuỗi: 
Var i:byte; 
 st:string; 
đoạn chương trình: 
 i:=pos(#32#32,st); 
 while i0 do 
 begin 
 Delete(st,i,1); 
 i:=Pos(#32#32,st); 
 end; 
2. Sử dụng dữ liệu kiểu array: 
 Array là một kiểu dữ liệu có cấu trúc bao gồm một số cố định các thành phần 
có cùng kiểu dữ liệu. Mỗi thành phần của array được truy xuất thông qua các chỉ số 
môt tả vị trí thành phần đó trong array. 
a. Khai báo kiểu: 
Cú pháp: 
Type = array[chỉ số] of ; 
Ví dụ: 
Type 
 Tocdo=array[Oto, Tai, Buyt, Dulich] of Integer; 
 Hoten=array[1..30] of String; 
Loai = array['A'..'Z'] of Byte; 
OrdType=Array[Char] of Byte; 
AsciiType=Array[Byte] of Char; 
Vietebooks Nguyễn Hoàng Cương 
Trang 19 
b. Khai báo biến: 
Cú pháp: 
Var :ARRAY[Chỉ số] of ; 
Ví dụ: 
Var 
 Diem:array[1..30] of Byte; 
Type 
 Xe=(Oto, Tai, Buyt, Dulich); 
 Tocdo=Array[Xe] of Integer; 
ý nghĩa: Bạn có thể tưởng tượng một biến như một hộp để chứa dữ liệu và Array là 
một tập hợp nối tiếp các hộp lại với nhau để chứa dữ liệu có cùng kiểu, mỗi hộp 
được đánh số thứ tự bằng chỉ số đã khai báo và dãy hộp được đặt chung bằng một 
tên đó là tên của biến kiểu Array. 
Ghi chú: Ðể khai báo Array nhiều chiều bạn theo cú pháp sau: 
Var :Array[Chỉ số1, chỉ số 2,...] of ; 
Ví dụ:Manhinh: Array[1..25,1..80.0..15] of Integer; 
c. Truy xuất dữ liệu kiểu Array: 
( Xuất dữ liệu kiểu Array: 
 Các thủ tục xuất nhập biến như Writeln, Readln không thể truy xuất thẳng 
biến Array mà phải thông qua từng thành phần của Array đó. 
Ví dụ: 
 Var a,b:Array[1..100] of String[30]; 
 c:Array[1..30,1..4] of String; 
Bạn không thể viết: 
 Write(a); Readln(b); Readln(c); 
Mà bạn phải viết: 
 Write(a[1]); 
 Write(a[2]); 
 ......... 
 Write(a[100]); 
 Readln(C[1]); 
 .......... 
Array thường kèm theo biến đếm có cùng kiểu với chỉ số của Array, thay đổi biến 
đếm của vòng lặp bạn sẽ lần lượt truy xuất hết các thành phần của Array như sau: 
 For i:= to do 
 Begin 
 Readln([i]); 
 Writeln([i]); 
 End; 
Ví dụ: 
Var Hoten:Array[1..100] of String; 
 i:Byte; 
Begin 
 For i:=1 to 100 do 
 Begin 
 Write('Nhap ho ten: ');Readln(Hoten[i]); 
 End; 
End. 
( Gán dữ liệu kiểu Array: 
Bạn có thể gán nội dung của hai biến Array cùng kiểu 
Ví dụ: 
Var a,b:Array[1..10] of Integer; 
Vietebooks Nguyễn Hoàng Cương 
Trang 20 
 i:Byte; 
Begin 
 For i:=1 to 10 do Readln(a[i]); 
 b:=a; 
 For i:=1 to 10 do Writeln(b[i]); 
Readln; 
End. 
d. Sắp xếp dữ liệu trên dãy: 
Sắp xếp là một quá trình tổ chức lại một dãy các dữ liệu theo một trật tự nhất 
định. Mục đích của việc sắp xếp là giúp cho việc tìm kiếm dữ liệu trong một dãy được 
dễ dàng hơn. Nguyễn lý chung của sắp xếp là So sánh và hoán vị. 
Sắp xếp bằng phương pháp chọn lựa đơn giản bắt đầu từ thành phần đầu tiên 
của dãy so sánh với các thành phần đó với nhau. Tiếp tục đến thành phần kế tiếp so 
sánh với các thành phần còn lại cho tới khi gặp thành phần cuối cùng. Vì sau thành 
phần cuối cùng không còn thành phần nào nữa để so sánh nên việc sắp sếp đã hoàn 
tất. 
Với phương pháp này hình thành hai vòng lặp. Vòng lặp thứ nhất lấy thành 
phần thứ i từ 1 tới N-1 so sánh và hoán vị với vòng lặp thứ 2 với j từ i+1 tới N 
Giải thuật: 
Cho i từ 1 đến n-1 thực hiện 
 Cho J từ i+1 đến n thực hiện 
 Nếu thành phần tứ i nhỏ hơn thành phần thứ j thì 
 Hoán vị hai thành phần thứ i và thứ j. 
Ví dụ: 
var i,j:Byte; 
 Trunggian:Real; 
Begin 
 For i:=1 to n -1 do 
 For j:=i+1 to n do 
 if A[j]<A[i] then {Thực hiện việc so sánh} 
 Begin 
 Trunggian:=A[j]; {Thực hiện việc hoán vị nếu 
sanh sánh} 
 A[j]:=A[i]; {bằng True} 
 A[i]:=Trunggian; 
End; 
End; 
3. Dữ liệu kiểu File: 
Các dữ liệu đã khảo sát ở trên đề thực hiện trong bộ nhớ RAM khi khởi động 
chương trình, khi chấm dứt chương trình các dữ liệu trên bị mất vì vậy việc lưu trữ 
dữ liệu lâu dài hoặc sử dụng lại dữ liệu đó bạn cần sử dụng dữ liệu kiểu File. 
Có 2 loại dữ liệu kiểu File: 
- File có kiểu: Dữ liệu được lưu trữ trên đĩa thành một tập tin chứa các Record 
và được ghi dưới dạng nhị phân 
- File dạng Text: Dữ liệu được lưu trữ trên đĩa thành một tập tin chứa các dữ 
liệu dưới dạng mã ASCII. Bằng các phần mềm soạn thảo văn bản có thể đọc được dữ 
liệu này. 
a. Khai báo dữ liệu kiểu File: 
Với dữ liệu File có kiểu: 
 Var :File of 
Vietebooks Nguyễn Hoàng Cương 
Trang 21 
Ví dụ: 
 Var f:File of Byte; 
 S:File of String; 
 Type 
 Hosocanbo=Record 
 Hoten:String; 
 Diachi:String; 
 End; 
 Var F:File of Hosocanbo; 
Với File dạng Text 
Var :Text; 
Khi khai báo tập tin kiểu Text dữ liệu ghi vào đĩa dạng File ASCII như là một tập tin 
văn bản 
b. Các thủ tục chuẩn trên dữ liệu kiểu File: 
( Gán tên tập tin cho một biến: 
Thủ tục Assign(Var ,:String); 
Thủ tục này nhằm mục đích gán một tập tin trên đĩa cho Tên biến File trong RAM. 
Ví dụ: 
Var F:Text; 
Begin 
.... 
Assign(f,'Chaoban.txt'); 
.... 
End; 
( Mở và tạo mới một tập tin: 
Thủ tục: Rewrite(Var ); (Ví dụ: Rewrite(f);) 
Thủ tục này tạo một tập tin trên đĩa có tên đã gán cho Tên biến File bằng lệnh gán 
Asign đồng thời mở tập tin đó ra để truy xuất dữ liệu. 
Chú ý: Khi mở tập tin bằng lệnh Rewrite nếu trên đĩa đã có tập tin trùng với tên bạn 
đặt thì tập tin trên đĩa sẽ bị xoá thay vào đó là một tập tin trống mà bạn đã gán tên 
cho Tên biến File. Nên bạn cần cẩn thận khi mở tập tin bằng lệnh Rewrite. 
( Mở một tập tin đã có: 
Thủ tục: Reset(Var ); 
 Mở một tập tin đã gán cho Tên biến File, nạp nội dung của tập tin này vào 
trong Tên biến File trong RAM để chuẩn bị cho việc truy xuất dữ liệu. 
Chú ý: Khi mở một tập tin bằng lệnh Reset nếu tập tin không có trên đĩa sẽ gây lỗi. 
( Ðóng một tập tin đã mở: 
Thủ tục: Close(Var ); 
Thủ tục này chuyển nội dung trong bộ nhớ vào tập tin trên đĩa đồng thời đóng tập 
tin lại giải toả bộ nhớ dành cho biến tập tin 
Chú ý : Các tập tin khi đã mở nếu không đóng lại sẽ mất các dữ liệu truy xuất trên 
Tên biến File. 
( Truy xuất dữ liệu: 
 Việc xuất nhập dữ liệu trên biến File có kiểu chỉ được thực hiện thông qua 
từng Record 
- Ðọc dữ liệu từ tập tin dùng thủ tục Read(,); 
- Ghi dữ liệu vào đĩa: dùng thủ tục Write(,); 
Vietebooks Nguyễn Hoàng Cương 
Trang 22 
Chú ý: Không dùng các thủ tục Readln, Writeln vì sau khi đọc, ghi xong một Record 
con trỏ sẽ tự động nhẩy sang Record tiếp theo. 
c. File văn bản: 
Ðể đọc dữ liệu trên File văn bản (Text File) bạn dùng các thrủ tục sau: 
- Read(Var f:Text;GT1,GT2...); 
- Readln(Var f:Text; v1,v2,...); Ðọc dữ liệu trên một dòng và gán cho một hay nhiều 
biến. 
* các hàm tiện ích trên kiểu Text File: 
- Eoln(Var f:Text):Boolean; Cho biết tình trạng hiện thời của con trỏ trên dòng đang 
truy xuất đã hết dòng hay chưa, nếu đã hết dòng hàm Eoln cho giá trị True. 
- Eof(Var F:text):Boolean; Cho biết con trỏ hiện thời đã đến cuối tập tin hay chưa, 
nếu đã ở cuối tập tin hàm Eof sẽ trả về giá trị True. 
* Một số ví dụ: 
( Hiện toàn bộ nội dung File lên màn hình: 
Var f:Text; 
 ch:Char; 
Begin 
{Tên tập tin gõ vào từ dòng lệnh} 
if Paramcount=1 then 
 Begin 
 Assign(f,ParamStr(1)); 
 Reset(f); 
 While not Eof(f) do 
 Begin 
 Read(f,Ch); 
 Write(ch); {Xuất dữ liệu ra màn hình} 
 End; 
 End; 
End. 
( Ðọc nội dung một File hiện ra màn hình dùng biến Line kiểu String để đọc từng 
dòng: 
Var f:Text; 
 Line:String; 
Begin 
{Tên tập tin gõ vào từ dòng lệnh} 
if Paramcount=1 then 
 Begin 
 Assign(f,ParamStr(1)); 
 Reset(f); 
 Repeat 
 Readln(f,Line); 
 Writeln(Line); {Xuất dữ liệu ra màn hình} 
 Until Eof(f); 
 End; 
End. 
( Bạn có thể tạo một chương trình phát nhạc từ một File nhạc tạo ra theo 
cấu truc Cao độ, trường độ theo từng dòng? 
Ví du: 
{----Lambada.Not----} 
Vietebooks Nguyễn Hoàng Cương 
Trang 23 
1318 60 
1174 20 
1046 20 
988 20 
.... 
Trong đó số đầu chỉ cao độ, số sau chỉ trường độ. 
Program Lambada; 
Uses Ctr; 
Const Dieuchinh=10; 
Var f:Text; 
 Caodo,Truongdo:Word; 
Begin 
Assign(f,'Lambada.not'); 
Reset(f); 
While (not Eof(f)) and (not Keypressed) do 
 Begin 
 Readln(f,Caodo,truongdo); 
 Sound(Caodo); 
 Delay(Dieuchinh*Truongdo); 
 Nosound; 
 End; 
Close(f); 
Nosound; 
End. 

File đính kèm:

  • pdfcac-ham-va-thu-tuc-trong-pascal.pdf
Bài giảng liên quan