Tin Học

Đề thi pascal học sinh giỏi lớp 9

You are viewing this post: Đề thi pascal học sinh giỏi lớp 9

Dưới đây là tổng hợp đề thi pascal học sinh giỏi lớp 9 mới nhất được cập nhập bởi An Vượng Villa. Mời các bạn tham khảo để làm tốt các bài tập pascal lớp 9 nhé.

Đề thi pascal học sinh giỏi lớp 9
Đề thi pascal học sinh giỏi lớp 9

I. Đề thi pascal học sinh giỏi lớp 9

II. Lời giải đề thi pascal lớp 9


Bài 1 đề pascal

PROGRAM dong_ho;
USES crt;
VAR n:LONGINT;
    f:TEXT;
    m:BYTE;
BEGIN
  assign(f,'DONGHO_INP.txt');
  reset(f);
  read(f,n);
  close(f);
  assign(f,'DONGHO_OUT.txt');
  rewrite(f);
  IF abs(n)>1000000 THEN
    BEGIN
      write(f,'n=',n,' la qua lon');
      close(f);
      exit;
    END;
  m:=1;
  IF n>=0 THEN 
    BEGIN  
      m:=n+m;
      WHILE m>12 DO m:=m-12;
    END
  ELSE BEGIN
         n:=n*-1;
         WHILE m<=n DO m:=m+12;
         m:=m-n;
  END;
  write(f,m);
  close(f);
END.

Nhận xét: Thuật toán hơi dài nhưng viết theo ý hiểu -> OK

PROGRAM tim_so;
USES crt;
VAR n,i:WORD; f:TEXT;
    a:ARRAY[1..10000] OF INTEGER;
    num,max:INTEGER; ok:BOOLEAN;
BEGIN
  assign(f,'TIMSO_INP.txt');
  reset(f);
  readln(f,n);
  IF n<=10000 THEN
    FOR i:=1 TO n DO readln(f,a[i]);
  close(f);
  assign(f,'TIMSO_OUT.txt');
  rewrite(f);
  {Rang buot du lieu}
  IF n>10000 THEN 
    BEGIN    
      writeln(f,'n is too large');
      close(f);
      exit;
    END;
  FOR i:=1 TO n DO
    IF (a[i]<-32000) OR (a[i]>32000) THEN
        BEGIN
          write(f,'a[',i,'] is too large');
          close(f);
          exit;  
        END;
  max:=a[1];
  {Tim so lon nhat}
  FOR i:=2 TO n DO
    IF max<a[i] THEN max:=a[i];          
  num:=a[1];                   
  {Gan cho num gia tri be nhat}
  FOR i:=2 TO n DO
    IF num>a[i] THEN num:=a[i];
  {Tim so lon nhi}
  FOR i:=1 TO n DO
    IF (num<a[i]) AND (a[i]<max) THEN num:=a[i];
  {Xac dinh truong hop No solution}
  ok:=FALSE;
  FOR i:=1 TO n DO
   IF num<>a[i] THEN ok:=TRUE;
  IF ok THEN write(f,num)
  ELSE write(f,'No solution');
  close(f);  
END.

Bài 2 đề pascal

Nhận xét bài số 2: Thuật toán của em đúng nhưng dài quá em có thể suy nghĩ theo những hướng sau để thuật toán ngắn lại hơn:

  • Hướng 1: Sắp xếp dãy số từ lớn đến bé giả sử a[1] ; a[2] … . Nếu mảng có ít hơn 2 phần tử hoặc a[2] = a[1] thì No solution còn không thì a[2] là kết quả (Cách suy nghĩ này đơn giản có điều thuật toán phải mất công sắp xếp mảng – nếu dữ liệu nhỏ thì vẫn OK)
  • Hướng 2: Em hoàn toàn có thể cải tiến vòng lặp tìm số lớn nhất để nó tìm được luôn số lớn nhì trong đó. Em hãy suy nghĩ để viết lại cho gọn hơn nhé.
PROGRAM so_nguyen_to_tuong_duong;
USES crt;
VAR f:TEXT;
    ok,yes:BOOLEAN;
    n,m,min,i:WORD;
PROCEDURE NT(so:WORD);
VAR i:WORD;
BEGIN                             
  ok:=TRUE;
  FOR i:=2 TO so-1 DO
   IF so MOD i = 0 THEN ok:=FALSE; 
END;

BEGIN
  assign(f,'NTTD_INP.txt');
  reset(f);
  read(f,n); read(f,m);
  close(f);
  assign(f,'NTTD_OUT.txt');
  rewrite(f);                    
  yes:=TRUE;
  IF n>m THEN min:=m ELSE min:=n;
  FOR i:=2 TO min DO
    BEGIN
      ok:=FALSE;
      IF (n MOD i = 0) OR (m MOD i = 0) THEN NT(i);
      IF ok THEN
        IF (n MOD i <> 0) OR (m MOD i <> 0) THEN yes:=FALSE;
    END;
  IF yes THEN write(f,'YES')
  ELSE write(f,'NO');
  close(f);  
END.

Nhận xét bài số 2: Em làm sai những vấn đề sau:

  • Chương trình con tìm số nguyên tố em chưa xử lí số 0, 1 vì vậy chương trình này vẫn cho 0, 1 là số nguyên tố em cần nhớ “số nguyên tố là số tự nhiên lớn hơn 1 và không có ước nào khác ngoài 1 và chính nó“. Có vẻ em thích dùng chương trình con PROCEDURE thầy thì lại thích dùng FUNCTION trong những trường hợp này (Nhưng không sao tùy sở trường của em). Với thuật toán kiểm tra số n có phải là số nguyên tố không em cũng chỉ cần kiểm tra xem nó có ước nhỏ hơn hoặc bằng căn bậc hai của n thôi bởi nếu n có ước lớn hơn căn bậc hai của n thì cũng có ước nhỏ hơn căn bậc hai của n
  • Phần chương trình đoạn xử lí của em rất hay tuy nhiên có lẽ em hiểu chưa đúng, em cần nhớ định nghĩa người ta đưa ra: “Hai số tự nhiên được gọi là Nguyên tố tương đương nếu chúng có chung các ước số nguyên tố” Em đưa vào biến Min = Min(m,n) là chương trình sẽ xử lí sai những trường hợp một trong hai số có ước nguyên tố lớn hơn số kia – em hãy suy nghĩ thật kĩ câu này nhé.
  • Một vài VD chương trình sẽ sai (1; 3) ; (5 ; 35) những cặp này không nguyên tố tương đương nhưng chương trình của em chắc chắn sẽ báo YES.

Hướng khắc phục:

  • Xử lí trường hợp nhỏ hơn 2 trong chương trình con kiểm tra số nguyên tố
  • Có thể thay Min = Min(m,n) bằng Max = Max(m,n) chương trình sẽ đúng

ĐÁP ÁN ĐỀ THI HỌC SINH GIỎI TIN HỌC LỚP 9, TỈNH LÂM ĐỒNG 2020 | PASCAL VÀ C++ | Nguyễn Xuân Hồng IT - YouTube

III. Một số dạng bài tập pascal thi học sinh giỏi


Đề pascal

Bài 1. (6.0 điểm)

Cho hai số A và B là hai số nguyên dương và A phải nhỏ hơn B (0 < AB < 100).

Yêu cầu: Viết chương trình cho phép nhập hai số và B đó từ bàn phím.

Hãy thực hiện:

a)      Tìm các số nguyên tố từ A đến B.

b)     Tìm ước chung lớn nhất của và B.

Ví dụ:

Nhập từ bàn phím

Kết quả

-Nhap A: 10

-Nhap B: 25

-Cac so nguyen to:

11     13     17     19     23

-Uoc chung lon nhat la: 5

Bài 2. (6.0 điểm)

Việc bảo vệ máy tính để hạn chế người khác thâm nhập là một vấn đề đặt ra cho mọi nguời sử dụng máy tính. Để tăng tính an toàn trong lưu trữ, một nguời đã quyết định giấu mật khẩu truy cập máy tính của mình vào một xâu S với một qui ước sao cho khi cần anh ta có thể lấy lại được mật khẩu từ S. Là một người yêu thích số học anh ta chọn mật khẩu P là một số tự nhiên và mã hóa P = P1 + P2 + … +Pi với (Pi là số nguyên, 0<=Pi<=9, 0<i<200) đem dấu các số Pi vào một xâu ký tự S.

Chẳng hạn xâu S=’mat #223 ma 678 @’ chứa mật khẩu là 28 vì P=2+2+3+6+7+8

Yêu cầu: Cho một xâu ký tự S chiều dài không quá 255 ký tự. Viết chương trình tìm mật khẩu P đã dấu trong xâu S biết P có giá trị nhỏ hơn 10­00.

Ví dụ:

Nhập từ bàn phím

Kết quả

Nhap xau S: thihoc5sinhgioi3huyen65 P = 19

Bài 3. (8.0 điểm)

Tại một văn phòng của Ủy ban nhân dân tỉnh có M người nộp hồ sơ, theo thứ tự bắt số từ 1 đến M. Tùy theo loại hồ sơ mà người ta xử lí trong thời gian nào đó của người thứ i là ti (i=1..M).

Yêu cầu: Viết chương trình nhập vào số nguyên dương M (0<M<=100) và dãy số nguyên dương t1, t2, …, tn (1<=ti<=10; i=1..M) theo thứ tự là số người nộp hồ sơ và thời gian xử lí hồ sơ. Hãy tính thời gian (phút) chờ của người thứ K (K=1..M) và chở bao nhiêu người để đến lượt mình.

Ví dụ:

Nhập từ bàn phím

Kết quả

-Nhap so nguoi nop ho so M = 5

-Nhap thoi gian tung nguoi cho:

2 3 2 5 6

-Nhap nguoi thu k = 4

-Nguoi thu 4 phai cho 3 nguoi nua

-Thoi gian cho la 7 phut

Hướng dẫn giải

Bài 1. (6.0 điểm)

            Cho hai số A và B là hai số nguyên dương và A phải nhỏ hơn B (0 < AB < 100).

Yêu cầu: Viết chương trình cho phép nhập hai số và B đó từ bàn phím.

Hãy thực hiện:

a)      Tìm các số nguyên tố từ A đến B.

b)     Tìm ước chung lớn nhất của và B.

Chương trình:

Program Bai1;

Uses crt;

Var A,B,i,r: integer;

0,5 điểm
Function ngto(n: integer): boolean;

Var i: integer;

Begin

Ngto:=false;

If n<2 then exit;

For i:=2 to trunc(sqrt(n)) do

If n mod i = 0 then exit;

Ngto:=true;

End;

1,5 điểm
Begin

Clrscr;

Write(‘Nhap A = ‘); Readln(A);

Write(‘Nhap B = ‘); Readln(B);

 

0,5 điểm
            Writeln(‘-Cac so nguyen to: ‘);

For i:=A to B do

If ngto(i) then write(i,’ ‘);

1,0 điểm
            While B<>0 do

Begin

r:=A mod B;

A:=B;

B:=r;

End;

Writeln(‘Uoc chung lon nhat la: ‘,A);

End.

1,5 điểm

Bộ test thử đúng: 1,0 điểm

Nhập từ bàn phím

Kết quả

-Nhap A: 48

-Nhap B: 72

-Cac so nguyen to:

53 59 61 67 71

-Uoc chung lon nhat la: 24

Bài 2. (6.0 điểm)

Việc bảo vệ máy tính để hạn chế người khác thâm nhập là một vấn đề đặt ra cho mọi nguời sử dụng máy tính. Để tăng tính an toàn trong lưu trữ, một nguời đã quyết định giấu mật khẩu truy cập máy tính của mình vào một xâu S với một qui ước sao cho khi cần anh ta có thể lấy lại được mật khẩu từ S. Là một người yêu thích số học anh ta chọn mật khẩu P là một số tự nhiên và mã hóa P = P1 + P2 + … +Pi với (Pi là số nguyên, 0<=Pi<=9, 0<i<200) đem dấu các số Pi vào một xâu ký tự S.

Chẳng hạn xâu S=’mat #223 ma 678 @’ chứa mật khẩu là 28 vì P=2+2+3+6+7+8

Yêu cầu: Cho một xâu ký tự S chiều dài không quá 255 ký tự. Viết chương trình tìm mật khẩu P đã dấu trong xâu S biết P có giá trị nhỏ hơn 10­00.

Chương trình:

Program Bai2;

Uses crt;

Var S: string;

i, j, P: integer;

0,5 điểm
Begin

Clrscr;

Write(‘Nhap xau S: ‘); Readln(S);

0,5 điểm
            i:=1;

P:=0;

While i<=length(S) do

If S[i] in [‘0’..’9’] then

Begin

Val(s[i],j);

P:=P+j;

End;

2,5 điểm
            Writeln(‘P = ‘,P);

End.

0,5 điểm

Bộ test thử đúng mỗi bộ: 1,0 điểm

Nhập từ bàn phím

Kết quả

Nhap xau S: ki2thichon5hoc5sinhgioi3cap61huyen65 P = 33
Nhap xau S: tinhoc5that65thu1vi5 P = 22

Bài 3. (8.0 điểm)

            Tại một văn phòng của Ủy ban nhân dân tỉnh có M người nộp hồ sơ, theo thứ tự bắt số từ 1 đến M. Tùy theo loại hồ sơ mà người ta xử lí trong thời gian nào đó của người thứ i là ti (i=1..M).

            Yêu cầu: Viết chương trình nhập vào số nguyên dương M (0<M<=100) và dãy số nguyên dương t1, t2, …, tn (1<=ti<=10; i=1..M) theo thứ tự là số người nộp hồ sơ và thời gian xử lí hồ sơ. Hãy tính thời gian (phút) chờ của người thứ K (K=1..M) và chở bao nhiêu người để đến lượt mình.

Chương trình:

Program Bai3;

Uses crt;

Var M, i, K, t: integer;

A: array[1..1000] of integer ;

1,0 điểm
Begin

Clrscr;

Write(‘-Nhap so nguoi nop ho so M = ‘); Readln(M);

Writeln(‘-Nhap thoi gian tung nguoi cho: ‘);

For i:=1 to M do read(a[i]);

Write(‘-Nhap nguoi thu K = ‘); Readln(K);

1,0 điểm
            T:=0;

For i:=1 to K-1 do t:=t+a[i];

2,0 điểm
            Writeln(‘Nguoi thu ‘,K,’ phai cho ‘,K-1,’ nguoi nua’);

Writeln(‘Thoi gian cho la ‘,t,’ phut);

End;

1,0 điểm

V. Video hướng dẫn đề thi pascal nâng cao


The article is compiled and aggregated from many sources by An Vượng Villa.

See more articles in the same category here: Tin Học

Review Queen

"Xin chào mọi người, tôi là Review Queen - một blogger chuyên viết đánh giá sản phẩm trong nhiều lĩnh vực khác nhau như thời trang, làm đẹp, công nghệ, gia dụng và nhiều hơn thế nữa. Với hơn 10 năm kinh nghiệm viết blog, tôi tự hào là một chuyên gia trong việc đánh giá và đưa ra những nhận xét chính xác về các sản phẩm, giúp độc giả có được những thông tin cần thiết trước khi quyết định mua hàng. Với tôi, việc đánh giá sản phẩm không chỉ là nghề nghiệp mà còn là niềm đam mê. Tôi luôn tìm kiếm những sản phẩm mới nhất và chất lượng nhất để có thể chia sẻ với độc giả của mình. Tôi tin rằng thông tin chính xác và trung thực sẽ giúp người đọc đưa ra được quyết định mua sắm thông minh hơn. Ngoài việc viết đánh giá sản phẩm, tôi cũng rất đam mê viết về các chủ đề khác như du lịch, ẩm thực, thủ thuật hay những kiến thức giáo dục. Tôi hy vọng các bài viết của mình sẽ giúp ích cho các bạn đọc trong cuộc sống hàng ngày. Cảm ơn các bạn đã quan tâm và ghé thăm blog của tôi. Hãy đón đọc các bài viết mới nhất từ Review Queen nhé!"

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 *

Back to top button