Tải bản đầy đủ (.pdf) (20 trang)

Sáng kiến kinh nghiệm một số ưu điểm của NGÔN NGỮ FREE PASCAL SO với TURBO PASCAL

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (458.14 KB, 20 trang )

kiểu xâu Unicode (WideString).
Nếu bạn vẫn thích kiểu String cũ của TP, bạn có thể dùng kiểu ShortString. Bây giờ bạn
có thể viết chương trình giải bài xâu đối xứng, xâu con chung với kiểu string của trên FP
và hạn chế n cỡ 1000 một cách rất dễ dàng. Chúng ta sẽ tìm hiểu kĩ hơn về lợi thế kiểu
xâu trong Free Pascal bài toán sau.

Bài toán 2: Xâu FIBONACI (Bài 3 đề thi chọn đội tuyển HSG quốc gia năm học
2008 - 2009).
Cho 3 xâu khác rỗng SA, SB, SR, trong đó độ dài của các xâu SA và SB không vượt quá
10, độ dài xâu SR không vượt quá 15. Dãy xâu F 0,F1, F2, ..., Fn được xây dựng theo qui
tắc sau: F0=SA, F1=SB, Fk+1=Fk-1+Fk; k=1,2,...,n-1; 1 < n  35.
Yêu cầu: Xác định số lần xuất hiện của SR trong FN.
Dữ liệu: Vào từ file văn bản BAI3.INP:


Dòng đầu tiên chứa số nguyên dương n.



Ba dòng tiếp theo chứa các xâu SA, SB, SR, mỗi xâu trên một dòng.

12


Kết quả: Đưa ra file văn bản BAI3.OUT chứa số lần xuất hiện tìm được.
Ví dụ:
BAI3.INP

BAI3.OUT

6



4

A
B
BAB

Khi giải quyết bài toán nay trong Turbo pascal thì đối với học sinh THPT sẽ gặp rất nhiều
khó khăn vì kiểu dữ liệu xâu trong Turbo Pascal chỉ có tối đa 255 kí tự với yêu cầu của
bài toán trên thì xâu Fn sẽ có độ dài rất lớn. Nhưng khi đem bài toán này giải quyết trên
Free Pascal thì có thể giải quyết khá đơn giản với kiểu dữ liệu Ansistring (kiểu dữ liệu
xâu lớn).

uses crt;
var sa,sb,sr,tam: string;
13


fi,fo:text;
st: array[0..35] of ansistring;
kq:ansistring;
i,n:longint;
dem:int64;

procedure docdl;
begin
assign(fi,'bai3.in6'); reset(fi);
readln(fi,n);
readln(fi,SA);
readln(fi,SB);

readln(fi,SR);
close(fi);
end;

14


procedure ghidl(kqd:int64);
Begin
assign(fo,'Bai3.ou6');
rewrite(fo);
writeln(fo, kqd);
close(fo);
end;

procedure xuly;
begin
st[0]:=sa; st[1]:=sb;
for i:=2 to n do st[i]:=st[i-1]+st[i-2];
kq:=st[n];
for i:=1 to length(st[n])-length(sr) do
begin
tam:='';
15


if kq[i]=sr[1] then
begin
tam:=copy(kq,i,length(sr)) ;
if tam=sr then dem:=dem+1;

end;
end;
ghidl(dem);
end;

begin
docdl;
xuly;
end.

6. Viết hàm thuận lợi hơn

16


FP có rất nhiều cải tiến trong cách viết các hàm. Để so sánh, chúng ta sẽ xem xét một số
ví dụ. Trong TP, chúng ta viết hàm tính giai thừa như sau:
function gt(n:integer):integer;
var i,tg:integer;
begin
tg:=1;
for i:=1 to n do tg:=tg*i;
gt:=tg;
end;
Tại sao ta lại phải thêm một biến tg để lưu trữ kết quả trung gian? Đó là do trong TP với
tên hàm ta chỉ được sử dụng duy nhất lệnh gán trị. Nếu đưa tên hàm vào biểu thức thì sẽ
thực hiện lời gọi hàm. Điều này đã được FP làm cho free bằng cách cho phép sử dụng
tên hàm nhƣ một biến (giống như Object Pascal dùng biến Result). Khi đó tên hàm có
thể xuất hiện ở trong cách biểu thức tính toán ngay trong thân hàm mà không tạo ra lời
gọi đệ quy. Hàm giai thừa trong FP có thể viết rất tiết kiệm biến như sau:

function Gt(n: integer): int64;
begin
17


gt := 1;
for n := n downto 2 do gt := gt * n;
end;
Vậy khi ta muốn gọi đệ quy thì sao? Thì chỉ việc thêm cặp dấu () và truyền tham số cần
thiết. FP sẽ biết ta muốn gọi đệ quy khi ta có thêm cặp (). Hàm giai thừa viết kiểu đệ quy
như sau: function Gt(n: integer): int64; begin if n=0 then exit(1) else exit(n*gt(n-1)); end;
Trong cách viết này ta còn thấy một điều tiện lợi của FP: dùng lệnh exit để trả lại kết
quả cho hàm (giống như C và Object Pascal sử dụng lệnh return). Bạn sẽ thấy sự tiện
lợi của cách viết này khi viết các hàm dạng " phát hiện đ

c ph n t đ u tiên r i thoát".

Chẳng hạn hàm tìm vị trí của phần tử x trong mảng a có n phần tử. Viết trong TP ta phải
viết như sau:
function Find(x: integer): integer;
Var i : integer;
begin
for i := 1 to n do
if a[i] = x then
begin
18


Find := i; exit;
end; Find := 0;

end;
Hàm này viết trong FP thì ngắn ngọn hơn nhiều:
Function Find(x: integer): integer;
Var i : integer;
begin
for i := 1 to n do
if a[i]=x then exit(i);
exit(0);
end;

19


III. PHẦN KẾT LUẬN
Tin học nói chung đóng vai trò hết sức quan trọng trong xã hội hiện đại, tin học đã làm
thay đổi nhận thức của con người và ứng dụng trong hầu hết các hoạt động của xã hội
loài người. Trong đó, đại diện là máy tính điện tử và khoa học xử lí dữ liệu của máy tính
điện tử.
Để tin học ngày càng phát triển mạnh thì việc tạo ra các phần mềm máy tính tốt để xử lý
công việc giúp con người trong công việc và giải trí là điều hết sức quan trọng, để làm
được điều đó cần phải có những lập trình viên tài giỏi để thực hiện, Việc dạy cho học
sinh lập trình để có thể tự viết chương trình chạy trên máy tính làm cho học sinh yêu
thích môn học và ham học hỏi, tìm tòi, sáng tạo.
Đề tài này mang tính thực tiển cụ thể là:Trong các kỳ thi học sinh giỏi việc học sinh hiểu
rỏ các ưu điểm của các ngôn ngữ lập trình giúp các em giải quyết tốt hơn các bài toán.

20




×