HomeĐề Thi học sinh giỏi

Đề luyện thi HSG tin học lớp 9 – Pascal – đề số 1

Like Tweet Pin it Share Share Email
Like và share giúp mình phát triển website nhé.
  •  
  •  

Đề luyện thi HSG tin học lớp 9 – Pascal – đề số 1

Bài làm của Minh

PROGRAM nguyento;
USES crt;
VAR ok:BOOLEAN; n,i:LONGINT; 
    f:TEXT;
PROCEDURE tim(i:LONGINT);
VAR j:LONGINT;
BEGIN
  ok:=TRUE;
  FOR j:=2 TO i-1 DO
    IF i MOD j = 0 THEN ok:=FALSE;
END;
BEGIN
  clrscr;
  assign(f,'NGUYENTO_INP.txt');
  reset(f); read(f,n);                             
  close(f);
  assign(f,'NGUYENTO_OUT.txt');
  rewrite(f);
  IF n<2 THEN write(f,'khong co so nguyen to nao')
  ELSE
    BEGIN 
       FOR i:=2 TO n DO
        BEGIN
          tim(i);
          IF ok THEN write(f,i,' ');
        END;
    END;
  close(f);
END.

Nhận xét bài 1:

  • Em làm tương đối tốt tuy nhiên để tối ưu chương trình con “tim” (Tìm số nguyên tố) thì em chỉ cần cho j chạy từ 2 đến phần nguyên căn bậc hai của i khi đó chương trình sẽ chạy nhanh hơn vì thử ít phép toán hơn. Ta đã áp dụng kiến thức ” Nếu a là số tự nhiên lớn hơn 1 và không có ước thực sự nhỏ hơn căn bậc hai của a thì a là số nguyên tố
  • Trong chương trình em bỏ dòng lệnh USES crt; và  clrscr; đi vì bài toán nhận xuất từ file nên không cần xóa màn hình làm gì
PROGRAM chinhphuong;
USES crt;
VAR f:TEXT;
    ok:BOOLEAN;
    n,i:LONGINT;
PROCEDURE tim(i:LONGINT);
VAR x:REAL;
BEGIN
  ok:=FALSE;
  x:=sqrt(i);
  IF frac(x)=0 THEN ok:=TRUE;  
END;
BEGIN
  clrscr;
  assign(f,'CPHUONG_INP.txt');
  reset(f);
  read(f,n);
  close(f);
  assign(f,'CPHUONG_OUT.txt');
  rewrite(f);
  IF n>=2000000000 THEN write(f,'so ',n,' la qua lon');
  IF n<0 THEN write(f,'khong co so chinh phuong nao');
  IF n<2000000000 THEN
   FOR i:=0 TO n DO
    BEGIN  
      tim(i);
      IF ok THEN write(f,i,' ');  
    END;                        
  close(f);
END.

Nhận xét bài 1:

  • Em làm tương tốt thầy thích cái cách mà em sử dụng hàm Frac(x) : cho kết quả là phần thập phân của số x.
  • Trong chương trình em bỏ dòng lệnh USES crt; và  clrscr; đi vì bài toán nhận xuất từ file nên không cần xóa màn hình làm gì
PROGRAM mahoa;
USES crt;
VAR f:TEXT;
    n,vt,i:BYTE; s,ss:STRING; ch:CHAR;
BEGIN
  clrscr;
  assign(f,'MAHOA_INP.txt');
  reset(f);
  readln(f,n);
  read(f,s);
  close(f);
  assign(f,'MAHOA_OUT.txt');
  rewrite(f);
  ss:='';
  FOR i:=1 TO length(s) DO
    BEGIN
       vt:=ord(s[i]);
       IF (vt>=65) AND (vt<=90) THEN
        BEGIN
          vt:=vt+n;
          IF vt>90 THEN vt:=vt-90+64  
        END;                        
       IF (vt>=97) AND (vt<=122) THEN
        BEGIN
          vt:=vt+n;
          IF vt>122 THEN vt:=vt-122+96  
        END;                          
       ss:=ss+chr(vt);
    END;              
  writeln(f,n);
  write(f,ss);
  close(f);
END.
PROGRAM giaima;
USES crt;
VAR f:TEXT;
    n,vt,i:BYTE; s,ss:STRING; ch:CHAR;
BEGIN
  clrscr;
  assign(f,'GIAIMA_INP.txt');
  reset(f);
  readln(f,n);
  read(f,s);
  close(f);
  assign(f,'GIAIMA_OUT.txt');
  rewrite(f);
  ss:='';
  FOR i:=1 TO length(s) DO
    BEGIN
       vt:=ord(s[i]);
       IF (vt>=65) AND (vt<=90) THEN
        BEGIN
          vt:=vt-n;
          IF vt<65 THEN vt:=90-(65-vt)+1  
        END;                        
       IF (vt>=97) AND (vt<=122) THEN
        BEGIN
          vt:=vt-n;
          IF vt>122 THEN vt:=122-(97-vt)+1  
        END;                          
       ss:=ss+chr(vt);
    END;              
  writeln(f,n);
  write(f,ss);
  close(f);
END.

Nhận xét bài 3, bài 4:

Em làm như vậy thì em phải nhớ ý nghĩa các con số 65, 90, 122,… nếu giả sử vào phòng thi mình quên nó thì sao nhỉ, hãy thử tìm cách để không phải nhớ những số đó!!

Comments (1)

Trả lời

Your email address will not be published. Required fields are marked *