Kinh nghiệm khi thi HSG môn tin học bằng pascal

1. Về miền giá trị của kiểu dữ liệu

– Khi đi thi bạn có thể cần dùng đến những kiểu dữ liệu mà bạn ít dùng, hoặc bạn ít quan tâm đến miền giá trị của nó. Rất may là trong pascal có hỗ trợ 2 hàm cho bạn biết miền giá trị của kiểu dữ liệu

Bạn có thể viết như sau:

  •  high(tên_kiểu_dữ_liệu-> miền giá trị lớn nhất của kiểu dữ liệu
  •  low(tên_kiểu_dữ_liệu-> miền giá trị nhỏ nhất của kiểu dữ liệu

Ví dụ:

writeln(high(longint)); // mien gia tri lon nhat cua kieu du lieu longint
writeln(low(longint)); // mien gia tri nho nhat cua kieu du lieu longint

Từ hàm trên có thể giúp ích cho bạn rất nhiều trong việc chọn dữ liệu phù hợp hoặc khởi tạo giá trị ban đầu (được nói đến ở mục 2)

2. Khởi tạo giá trị ban đầu

Đề bài minh họa: cho N số nguyên, hãy tìm giá trị nhỏ nhất trong N số nguyên dương trên.

VD N=5; gồm các số 100 20 -900 80 2

Như bạn cũng biết, thông thường bạn sẽ tạo biến min = phần tử đầu tiên của dãy. tức là min = 100. Đối với bài này gán vậy là ổn, nhưng đôi khi 1 số bài 1 số trường hợp khiến bạn phải lăn tăn không biết gán min là giá trị nào.

thì cách tốt nhất là bạn gán min=high(longint) // ở bài này mình giả sử là kiểu dữ liệu longint nhé, đại khái là gán giá trị dương vô cùng của kiểu dữ liệu á

3. Lưu ý về vấn đề khai báo kiểu dữ liệu

Ngày xưa học, các thầy thường yêu cầu bạn khai báo kiểu dữ liệu tối ưu nhất, là byte, interger, hay word… nhưng thật sự lúc đi thi thì điều đó không giúp ích cho bạn quá nhiều.

Theo mình các bạn phải khai báo 100% là longint hết thì tốt nhất, nếu biến nào cần cao hơn thì các bạn có thể cân nhắc dùng đến int64 hay qword, ý mình nói ở đây là khi đề cho dữ liệu dưới longint thì bạn hãy cứ đặt longint, vì bộ nhớ cấp phép cho bạn trong các cuộc thi khá nhiều. khi khai báo int64 mà kiểu mảng thì bạn mới cần cân nhắc.

Đối với loại mảng đánh dấu 2 giá trị 0/1, true/false thì bạn hãy đặt byte hoặc boolean

4. Không khai báo mảng trong hàm và thủ tục

Bạn lưu ý là không khai báo mảng trong thủ tục, vì một số lúc sẽ bị lỗi mà bạn không tìm được nguyên nhân, tất cả mảng bạn phải khai báo ở biến toàn cục.

5. Vấn đề debug trong pascal

Nếu không quen chức năng debug trong pascal, hãy thử write ra màn hình giá trị của biến để theo dõi từng bước, cái này mình chỉ gợi ý cho các bạn thôi, chứ để dùng thành thạo, linh hoạt thì có lẽ mình sẽ hướng dẫn ở những bài sau, thật ra ngày xưa đi thi mình không bao giờ dùng debug chỉ toàn write ra giá trị nếu cần theo dõi biến thôi

Nếu dịch ko lỗi mà chạy bị lỗi thì bạn hãy dùng F7 (chạy từng lệnh) hoặc F8(chạy qua cả 1 hàm, thủ tục) thường mình dùng F8, nếu bị lỗi sẽ biết lỗi tại hàm/thủ tục nào, rồi mình tiếp tục theo dõi giá trị biến trong hàm đó

6. Linh hoạt trong việc vô hiệu hóa code ( chú thích code)

Khi bạn chạy chương trình bị lỗi, mà ko biết lỗi tại đâu, hãy vô hiệu hóa code bằng câu lệnh chú thích {    ………….    } hoặc // …………… , bạn vô hiệu hóa rồi chạy thử, nếu ko lỗi thì giảm bớt phạm vi chú thích, đến lúc nào đó khi phạm vi chú thích được thu hẹp bạn sẽ biết code bạn lỗi chỗ nào. cái này cũng khá hay, nên các bạn thử dùng. Nói chung các bạn phải có những thủ thuật riêng để chủ động tìm lỗi, chứ ngồi đợi F7 từng bước chạy debug thì rất lâu 🙁

7. Dùng các lệnh continue, halt, break, exit

  • Lệnh continue thường được dùng trong vòng lặp, cụ thể như sau:

Khi bạn cần bỏ qua các lệnh phía sau và thực hiện vòng lặp tiếp theo thì hãy dùng continue;

VD:

for i:=1 to 10 do
    begin
        if (i=2) or (i=5) then
            continue;
        write(i,' ');
    end;

đoạn code trên khi i là 2 và 5 thì nó sẽ bỏ qua lệnh phía dưới, và thực hiện vòng lặp tiếp theo

kết quả xuất ra cụ thể là 1 3 4 6 7 8 9 10

  • Lệnh break thì thường cũng được dùng trong vòng lặp: chủ yếu để bạn dừng vòng lặp hiện tại.
  • Lệnh exit để bạn thoát khỏi hàm hoặc thủ tục. đối với hàm exit(giá_trị) sẽ trả về giá_trị cho hàm đó.
  • Lệnh halt để bạn dừng cả chương trình.

Nhưng lưu ý, khi bạn dùng các lệnh dừng Halt, hãy đảm bảo bạn đã đóng file (nếu có đọc/ghi file) tránh gặp lỗi.

3 thoughts on “Kinh nghiệm khi thi HSG môn tin học bằng pascal

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *