Sáng kiến kinh nghiệm môn tin học THPT một số ưu điểm của ngôn ngữ free pascal so với turbo pascal - Pdf 39

SÁNG KIẾN KINH NGHIỆM

ĐỀ TÀI:
"MỘT SỐ ƯU ĐIỂM CỦA NGÔN NGỮ FREE PASCAL SO VỚI
TURBO PASCAL"

1


A. PHẦN MỞ ĐẦU
I. LÝ DO CHỌN ĐỀ TÀI
Ngày nay, cùng với sự phát triển của tin học ở Việt Nam nói chung và trên thế giới đang
diễn ra quá trình tin học hoá nói riêng đặc biệt trên nhiều lĩnh vực hoạt động của xã hội
loài người và đem lại nhiều hiệu quả to lớn.
Sự phát triển mạnh mẽ như “ vũ bão ” của tin học đã làm cho xã hội có nhiều nhận thức
mới về cách tổ chức các hoạt động. Nhiều quốc gia trên thế giới ý thức được rất rõ tầm
quan trọng của tin học và có những đầu tư lớn cho lĩnh vực này, đặc biệt trong giáo dục
nâng cao dân trí về tin học và đào tạo nguồn nhân lực có chất lượng cao. Người Việt
Nam có nhiều tố chất thích hợp với ngành khoa học này, vì thế chúng ta hi vọng có thể
sớm hoà nhập với khu vực và trên thế giới.
Nước ta đã nhận thấy được tầm quan trọng của ngành Tin học và đã đưa môn học này
vào nhà trường phổ thông như những môn khoa học khác bắt đầu từ năm học 2006-2007.
Và tổ chức các cuộc thi học sinh giỏi môn Tin học cấp tỉnh, cấp quốc gia.
Hiện nay tại tỉnh Thanh Hóa các kỳ thi học sinh giỏi cấp tỉnh thường cho học sinh lập
trình trên 2 ngôn ngữ lập trình là Turbo Pascal và Free Pascal. Trong quá trình ôn luyện
đội tuyển học sinh giỏi của môn Tin học của trường tôi nhận thấy một số ưu điểm của
ngôn ngữ lập trình Free Pascal so với ngôn ngữ lập trình Turbo Pascal.
Từ lí do trên, tôi xin trình bày sáng kiến kinh nghiệm “MỘT SỐ ƯU ĐIỂM CỦA NGÔN
NGỮ LẬP TRÌNH FREE PASCAL SO VỚI TURBO PASCAL”
II. MỤC ĐÍCH CỦA ĐỀ TÀI
Trong chương trình tin học THPT do số lượng tiết học han chế (52 tiết) về kiến thức lập

- Dòng đầu ghi 2 số N và K.
- Dòng tiếp theo lần lượt ghi N số a1, a2,..., aN.
Kêtq quả: Ra file văn bản BAI2.OUT:
- Số 1 nếu tồn tại một cặp số thoả mãn yêu cầu bài toán.
- Số 0 nếu không tồn tại cặp số nào thoả mãn yêu cầu bài toán.
Giới hạn: 0
Close(f);
End;
{=====================================================}
Begin
Khoi_Tao_Va_Doc_Du_Lieu;
Process;
End.
Nhưng khi giải quyết bài toán này trên ngôn ngữ lập trình Turbo Pascal sẽ gặp phải vấn
đề như sau: Vấn đề thường mắc với học sinh THPT là đọc dãy ai vào một mảng nhưng số
lượng phần tử ai quá lớn (N lớn) do đó không thể lưu trữ bằng một mảng thông thường
được khi chạy trên Ngôn ngữ lập trình Turbo Pascal sẽ báo lỗi: Error 22: Structure too
large. Tại sao lại thế? Câu trả lời là: TP là môi trường lập trình 16 bit trên HĐH DOS do
đó nó có nhiều hạn chế. Han chế thứ nhât là kích thước của biến và kiểu dữ liệu là
64KB, trong đó có biến mảng và kiểu mảng. Đó là do dùng số 16 bit thì chỉ có thể chỉ số
5


hoá được 216 = 64K giá trị thôi. Khi ta khai báo max = 50000 thì mảng A của ta có kích
thước 50000x2 (2 là kích thước kiểu integer) =10 5 > 64K nên TP báo lỗi "structure too
large" (kiểu cấu trúc quá lớn) là đúng rồi. Vậy bây giờ thay vì khai báo mảng A là 1
mảng, ta sẽ khai báo A thành rất nhiều mảng nhỏ hơn. Khi đó nếu TP không báo lỗi
"structure too large" thì cũng báo lỗi là "too many varibles". Đó là do hạn chế thứ 2 của
TP: tổng kích thước các biến toàn cục (global) cũng ≤ 64KB . Ta có chia A thành bao
nhiêu mảng con thì TP vẫn bắt tổng kích thước của chúng ≤ 64KB. (Tuy nhiên để giải
quyết bài toán 1 trên ngôn ngữ lập trùng Turbo Pascal ta có nhiều cách để xử lý. Ví dụ
như: Vì 0
toán số học xảy ra khi chúng ta tính biểu thức có các hạng tử trong miền integer nhưng
kết quả thì nằm ngoài miền (chẳng hạn 30000 + 30000). Những lỗi như vậy thường ít khi
ta để ý, nhưng rất phiền toái. Sửa chúng thì cũng không khó lắm, chỉ cần chuyển đổi kiểu
(thành LongInt hay Real) là OK. Với FP thì những hạn chế đó không thành vấn đề. Với
lợi thế 32 bit (gấp đôi TP), FP cung cấp kiểu Int64, mới nghe chắc bạn cũng đoán được
đó là kiểu số nguyên 64 bit. Với Int64 các bạn có thể tìm được các số nguyên tố 18 chữ
số (cỡ tỉ tỉ) hay tính được giai thừa của 20.
5. Kiểu string lớn Khi lập trình, chúng ta rất nhiều lần gặp vấn đề với các xâu tối đa 255
kí tự của TP (chẳng hạn bài toán xâu đối xứng, bài toán đếm từ…). Ta có thể giải quyết
vấn đề bằng mảng kí tự (array of char) nhưng khi đó ta lại không thể dùng các phép toán
trên xâu rất mạnh của Pascal. Không chỉ có cải tiến về kiểu nguyên, kiểu string trong FP
cũng rất tuyệt vời. String trong FP không còn hạn chế 255 kí tự của TP nữa mà có
kích thước tối đa là 2.. tỉ kí tự. Hơn nữa FP còn hỗ trợ 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.




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


close(fi);
end;
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:='';
if kq[i]=sr[1] then
begin
tam:=copy(kq,i,length(sr)) ;

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
10


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


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status