1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Giới Thiệu Trình Biên Dịch FREE PASCAL

21 663 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 21
Dung lượng 361,5 KB

Nội dung

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... Kiểu xâu 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 đ

Trang 1

GIỚI THIỆU TRÌNH BIÊN

DỊCH FREE PASCAL

GV: Ngô Trung Tưởng Trường THPT chuyên Lê Hồng Phong

Trang 2

I Bộ nhớ rộng rãi

- Free Pascal (FP) là môi trường lập trình 32 bit: Dùng một số 32 bit thì

có thể chỉ số hoá được 2 32 = 4G giá trị, vậy nên biến trong FP có thể có kích thước 4GB Các thầy cô chú ý: 4GB=4×1024MB Trong khi đó máy tính ở phòng máy chúng ta thường dùng có chừng 512M RAM (Turbo Pascal cho phép khai báo biến 64 KB)

- FP là môi trường lập trình chạy trên nền các HĐH 32 bit (Windows,

Linux, OS/2… và cả DOS nữa nhưng đó là phiên bản DOS 32 bit mở

rộng)

- FP tương thích hoàn toàn với TP Đây cũng là một điều thú vị IDE của

FP thì giống hệt TP (tất nhiên có nhiều chức năng tiên tiến hơn, nhưng những gì bạn làm được với TP đều làm được trên FP).

=> Tôi nghĩ vậy là quá đủ để chúng ta thay thế TP bằng FP.

Trang 3

II Kiểu dữ liệu

- Tất cả các kiểu dữ liệu có trong TP đều có trong

FP Ngoài ra FP còn có thêm một số kiểu dữ liệu mới

a Kiểu số nguyên lớn

- Với lợi thế 32 bit (gấp đôi TP), FP cung cấp 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.

- Hai kiểu số nguyên lớn là int64 và qword:

+ int64 kích thước 8 byte, có giá trị từ: -263 … 263 -1+ qword kích thước 8 byte, có giá trị từ: 0 … 2 64 -1

2 63 = 9223372036854775808

2 64 = 18446744073709551616

Trang 4

II Kiểu dữ liệu

b Kiểu xâu 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ự 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.

- Tên kiểu xâu lớn là: ansistring

Trang 5

III Viết hàm thuận lợi

- 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 xem ví dụ hàm tính giai thừa của số n.

Trong Turbo Pascal Trong Free Pascal

begin

gt := 1;

for i := 1 to n do gt := gt * i;

end;

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

(đệ qui)

FP cho phép sử dụng tên hàm như một biến Khi đó tên hàm có thể xuất hiện ở trong các 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

Trang 6

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

III Viết hàm thuận lợi

Trang 7

- Ví dụ cách viết hàm trong TP và FP cho bài toán tìm

vị trí đầu tiên x trong mảng a có n phần tử

Trong Turbo Pascal Trong Free Pascal

function Find(x: integer): integer;

if a[i]=x then exit(i);

exit(0);

end;

Trang 8

IV Tính thời gian thực hiện chương trình giữa TP và FP

Trong TP chúng ta dùng từ khoá absolute để xác

định một vị trí cố định trong bộ nhớ Khai báo

đó gọi là địa chỉ tuyệt đối Chẳng hạn để đo thời

gian chạy chương trình, người ta khai báo biến

time kiểu longint tại địa chỉ 0:$46C, bởi vì vị trí

đó là nơi máy tính lưu bộ đếm của đồng hồ Tần

số cập nhật của nó là 18.2 lần/giây

FP chạy trong môi trường 32 bit, không có khái niệm địa chỉ tuyệt đối Để đo thời gian chạy chương trình ta sử dụng hàm DecodeDateTime có sẵn trong thư viện DateUtils và thêm thư viện SysUtils chứa mã thời gian.

decodeDateTime(now,y,mon,d,h,m,s2,ss2); ss:=ss2-ss1;

if ss<0then begin ss:=ss+1000;s1:=s1+1;end; s:=s2-s1;

if s<0 then s:=s+60;

writeln('Runned in: ',s,':',ss);

readln;

END.

Trang 9

Một số định hướng trong dạy HSG

môn tin học khi sử dụng FP

1.Bài thi chấm bằng test, có so sánh thời gian chạy chương trình cho mỗi test (thông thường không quá 1s cho mỗi test)

- Chương trình phải đưa ra được kết quả đúng

- Tìm ra kết quả đúng với thời gian nhanh nhất có thể (đây là tiêu chí phân loại học sinh)

2 FP sử dụng bộ nhớ rộng rãi, không quan tâm việc tiết kiệm bộ nhớ Nên tập trung nhiều vào việc cải tiến các giải thuật sao cho tối ưu.

3 Các bài toán trong tin học hiện nay thường giải quyết bằng rất nhiều lớp giải thuật khác nhau Nên ta biết nhiều thuật toán tối ưu giúp tìm ra kết quả tốt nhất.

Trang 10

Giới thiệu 2 thuật toán tối ưu và rất hay gặp trong các bài thi tin học

1 Thuật toán sắp xếp Quicksort

2 Thuật toán tìm kiếm nhị phân.

Trang 12

Phân tích từng lớp giải thuật:

- C1: làm được 30% số điểm rất đơn giản là duyệt mọi dãy con

Trang 13

C2: Cải tiến cách 1, để tính tổng các số từ i đến j ta không cần dùng đến vòng lặp để tính Sử dụng mảng tính trước: s[i]: là tổng các số từ 1 đến i.

Trang 14

C3: cải tiến cách 2, ta có nhận xét sau:

Ta có s[j]-s[i-1]=0 => s[j]=s[i-1] Như vậy nếu s[j]=s[i-1] thì tức là tổng các số từ i đến j trong dãy A bằng 0.

Từ nhận xét trên ta có thuật toán cách 3 được 100% số điểm như sau:

+ sắp xếp mảng s theo thứ tự tăng (hoặc giảm) dần

+ Mỗi phần tử s[j] gọi x[i] là tần số xuất hiện của nó trong mảng S.

Kết quả bài toán là kq=

tràn số ta khai báo kiểu int64 và kq cũng vậy.

c1 …

2 ] [

Trang 15

Bài tập 2

ĐÓNG GÓI ĐƯỜNG

An là nhân viên giao hàng ở nhà máy đường Nhiệm vụ của An lần này là phải giao đúng n kg đường cho một xí nghiệp bánh kẹo Ở nhà máy, đường được đóng gói trong 2 loại túi: túi đựng được 3 kg và túi 5 kg,

số lượng đường trong mỗi túi phải được đóng đúng với sức chứa của nó, không thừa và không thiếu

Ví dụ, để giao 18 kg đường An có thể mang 6 túi loại 3 kg hoặc 3 túi loại 5 kg và 1 túi loại 3 kg An luôn luôn muốn chọn phương án sao cho số túi cần mang là ít nhất.

Yêu cầu: Cho n Hãy xác định số túi ít nhất cần mang Nếu không có cách mang thì đưa ra số -1.

Dữ liệu: Vào từ tệp văn bản TUIDUONG.INP gồm một dòng chứa số nguyên n.

Kết quả: Đưa ra tệp văn bản TUIDUONG.OUT một số nguyên – kết quả xác định được.

Trang 16

Phân tích giải thuật bài tập 2

C1: Thử tất cả các trường hợp bằng 2 vòng lặp đơn giản: Gọi a là số lượng túi 3kg tối đa dùng để chứa n kg đường

Trang 17

Phân tích giải thuật bài tập 2

Trang 18

Phân tích giải thuật bài tập 2

C3: Nhận xét sau: để sử dụng số túi ít nhất thì ta phải đóng với số túi 5Kg nhiều nhất có thể Từ đó ta thấy không cần sử dụng vòng lặp để làm.

a= n div 5;//số túi 5kg, b số túi 3Kg

Du= n mod 5;//Du chỉ nhận giá trị 0 đến 4

Dựa vào Du ta tính số túi còn lại

Trang 19

là 15; 15; 10 và 15 mét Tổng số mét gỗ lấy được là 8 mét (dư 1 mét).

Yêu cầu: Hãy tìm vị trí đặt lưỡi cưa hợp lí (số nguyên H lớn nhất) sao cho lấy được M mét gỗ và số mét gỗ dư ra là ít nhất.

Dữ liệu: Vào từ tệp văn bản WOOD.INP

Dòng thứ nhất chứa 2 số nguyên dương N và M (1≤N≤10 6 ; 1≤M≤2x10 9 ) cách nhau một dấu cách Dòng thứ hai chứa N số nguyên dương a i là độ cao của mỗi cây trong hàng (1≤a i ≤10 9; i=1…N), mỗi

Trang 20

Tìm cách chia các TH để phân loại bài

làm học sinh

Trang 21

Xin chân thành cám

ơn các thầy cô!

Ngày đăng: 25/05/2017, 07:46

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w