Thi Tin học trẻ tỉnh Gia Lai năm 2019 Khối Trung học Cơ sở

Một phần của tài liệu Bài giải Đề thi Tin học trẻ THCS các quận,huyện,thị xã ■ Lập trình Free Pascal ■ Tập 2 (Trang 30 - 34)

Khối Trung học Cơ sở

Thời gian làm bài: 150 phút.

Hướng giải quyết:

- Có thể nhập số n từ bàn phím vì đề thi không nói đến file Input và Output

- Thay vì nhập biến n là số, có thể nhập biến n là chuổi (string) để dễ xử lý hơn và nhập được số có giá trị lớn

- Dùng vòng For i:=1 to Length(n) downto 1 để in ra số đảo ngược của số n

Lập trình như sau: Var Var

n: String; i: Integer; i: Integer; Begin

WriteLn('Ban hay nhap so n');

ReadLn(n); // Đọc số n theo dạng chuổi (String) để dễ xử lý

For i:=Length(n) downto 1 do Write(n[i]);

Trang 31 Biên soạn: Th.S Nguyễn Anh Việt

Hướng giải quyết:

- Nhập chuổi Ch=‟12/15‟

- Dùng hàm Pos để tìm vị trí vt của „/‟ (vt=3) - Tử số là chuổi con từ vị trí đến vt-1 (1 đến 2)

- Mẫu số là chuổi con từ vị trí đến vt+1 đến cuối (4 đến 5) - Đổi tử số và mẫu số sang dạng số bằng hàm Val(chuỗi, số, lỗi)

- Tìm ước số chung lớn nhất (UC) của tử số và mẫu số (=3) (bạn hãy tham khảo trang 14 và 15)

- Chia tử số và mẫu số cho UC - Xuất kết quả (tử số, „/‟, mẫu số)

Lập trình như sau: Var Var

PhanSo, TuSo, MauSo: String; TS, MS, UC: LongInt;

VT, Loi: Integer;

{---} Function UCLN(a, b: LongInt): LongInt; Function UCLN(a, b: LongInt): LongInt;

Begin

While (a mod b<>0) and (b mod a<>0) do Begin If a>b then a:=a mod b;

If (a mod b=0) or (b mod a=0) then Break; If b>a then b:=b mod a;

End;

If a=b then Exit(a);

If a>b then Exit(b) else Exit(a); End;

{====================================================================} Begin Begin

WriteLn('Ban hay nhap phan so'); ReadLn(PhanSo); VT:=Pos('/', PhanSo); TuSo:=Copy(PhanSo, 1, VT-1); MauSo:=Copy(PhanSo, VT+1, Length(PhanSo)-VT); Val(TuSo, TS, Loi); Val(MauSo, MS, Loi); UC:=UCLN(TS, MS); TS:=TS div UC;

Trang 32 Biên soạn: Th.S Nguyễn Anh Việt

MS:=MS div UC;

WriteLn(TS, '/', MS); End.

Hướng giải quyết:

- Xuất phát với các biến i=1; độ dài L của chuổi (1234…) là 1 và tổng (Tong)=1 - Cho i tăng (-> 2, 3, 4…), biến i thành chuổi. Dùng hàm Val để đổi từng chữ số của i thành số và cộng vào biến tổng, tăng giá trị của L lên 1

- Khi nào L=n là số chữ số cần tính tổng thì ngưng.

Lập trình như sau: Var Var

So, Loi, n, i, j, L, Luu_i: LongInt; Tong: QWord; Ch: String; Begin WriteLn('Nhap so n'); ReadLn(n); i:=1; L:=1; Tong:=1; While L<n do Begin Inc(i); Luu_i:=i; Str(i, Ch);

For j:=1 to Length(Ch) do Begin Val(Ch[j], So, Loi);

Tong:=Tong+So; Inc(L);

If L=n then Break; // Nếu chữ số cộng vào là thứ n thì ngưng

End; End;

WriteLn(Tong); End.

Trang 33 Biên soạn: Th.S Nguyễn Anh Việt

Hướng giải quyết:

- Dùng 2 vòng For i chạy từ 1 đến m-1 và For j chạy từ 1 đến n-1 để duyệt từng phần tử a[i,j] của ma trận m x n 1, 1 i, j i, j+1 i+1, j i+1, j+1 m-1, n-1

Trang 34 Biên soạn: Th.S Nguyễn Anh Việt

- Với mỗi phần tử a[i,j], hình vuông đồng nhất bậc 2 gồm các ô a[i,j], a[i+1,j], a[i, j+1] và a[i+1, j+1]

- Nếu 4 ô này bằng nhau thì tăng giá trị phần tử đếm (Dem[a[i,j]]). TD: a[i,j]=1 thì tăng giá trị Dem[1]

- Cuối cùng tìm giá trị lớn nhất Max của mảng Dem

Lập trình như sau: Var Var

Max: Byte;

Một phần của tài liệu Bài giải Đề thi Tin học trẻ THCS các quận,huyện,thị xã ■ Lập trình Free Pascal ■ Tập 2 (Trang 30 - 34)

Tải bản đầy đủ (PDF)

(34 trang)