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;