# data[].attributes.body
uses crt;

var i,j,n,d,g,c,k,h:longint;

st,s,x:ansistring;

t,f:text;

const a:array[1..6] of string=('A','B','C','D','E','F');

begin

ASSIGN(T,'HEXA.INP');RESET(T);

ASSIGN(F,'HEXA.OUT');REWRITE(F);

readln(t,n);

c:=1;

for i:=1 to n do

begin

k:=i;

if length(st)>=n then break;

if i mod 10 =0 then

for h:=k to k+5 do

begin

d:=0;

g:=h;

if length(st)>=n then break;

while g>=20 do

begin

g:=g-10;

inc(d);

end;

if j=6 then j:=0;

if (g>=10) and (g<=15) then

begin

inc(j);

if d>0 then

begin

str(d,x);

st:=st+x+a[j];

end else st:=st+a[j];

if length(st)>=n then break;

end;

if length(st)>=n then break;

if h=k+5 then

begin

str(i,s);

st:=st+s;

end;

if length(st)>=n then break;

end else

begin

str(i,s);

st:=st+s;

if length(st)>=n then break;

end;

if length(st)>=n then break;

end;

write(f,st[n]);

close(t);close(f);

end.

# data[].attributes.body
assign(input,'LASTNUM.INP');reset(input);

assign(output,'LASTNUM.OUT');rewrite(output);

readln(n);

readln(s);

min:=1000000;

for i:=length(s) downto 1 do

begin

for j:=i+1 to length(s) do

begin

val(s[i],a); val(s[j],b);

if (b>a) and (b-a<min) then

begin

min:=b-a;

v:=i;

v1:=j;

end;

end;

end;

t:=s[v]; s[v]:=s[v1]; s[v1]:=t;

for i:=v+1 to n-1 do

for j:=i+1 to n do

if s[i]>s[j] then

begin

t:=s[i];

s[i]:=s[j];

s[j]:=t;

end;

write(s);

# data[].attributes.body
9 -2 6 2 1 3 4

0 -1 6 7 1 3 3

8 -2 8 2 5 3 2

1 -1 6 2 1 6 1

7 -2 6 2 1 3 7

# data[].attributes.attachment_link.readable_text
	SỞ GIÁO DỤC ĐÀO TẠO	KỲ THI CHỌN HỌC SINH GIỎI CẤP TỈNH LỚP 9 THCS
	BÌNH ĐỊNH	KHÓA NGÀY: 18-3-2015
	ĐỀ CHÍNH THỨC	Môn thi:	TIN HỌC
	Thời gian: 150 phút (không kể thời gian phát đề)
	Ngày thi:	18/3/2015
Tổng quan bài thi:
Bài
Tên bài
Tên tệp
chương trình
Tên tệp
dữ liệu vào
Tên tệp
dữ liệu ra
1
Liên phân số
LIENPS.PAS
Nhập từ
bàn phím
Xuất trên
màn hình
2
Số nguyên tố cùng nhau
NTCN.PAS
NTCN.INP
NTCN.OUT
3
Tìm đường hái quả
HAIQUA.PAS
HAIQUA.INP
HAIQUA.OUT
Bài 1: Liên phân số (7,0 điểm):
	Số hữu tỉ dương a/b luôn được biểu diễn dưới dạng một liên phân số hữu hạn:
Liên phân số này ký hiệu là [q0,q1,q2,...,qn], trong đó q0³0; q1,q2,...,qn là những số nguyên dương; qn>1; n gọi là độ dài của liên phân số.
Hãy viết chương trình biến đổi một phân số a/b thành liên phân số hữu hạn.
Dữ liệu vào là hai số nguyên dương a, b nhập từ bàn phím để biểu diễn phân số a/b.
Dữ liệu ra là một dòng gồm các số q0,q1,q2,...,qn biểu diễn dạng liên phân số của phân số a/b. Các số viết cách nhau ít nhất một khoảng cách.
	Ví dụ:
Input
Output
a=7
b=5
1 2 2
Bài 2: Số nguyên tố cùng nhau: (7,0 điểm):
	Hai số nguyên dương được gọi là nguyên tố cùng nhau nếu ước số chung lớn nhất của chúng bằng 1.
	Cho N số nguyên dương A1,A2,...,AN. Gọi M là giá trị lớn nhất trong các số A1,A2,...,AN.
	Viết chương trình tìm số nguyên dương X lớn nhất không vượt quá M mà X nguyên tố cùng nhau với tất cả các số A1,A2,...,AN.
	Dữ liệu vào là tệp NTCN.Inp có cấu trúc như sau:
	- Dòng đầu là số nguyên dương N (N£100).
	- N dòng tiếp theo, mỗi dòng chứa một giá trị tương ứng A1,A2,...,AN (Ai£1000;i=1,2,...,N).
	Dữ liệu ra là tệp NTCN.Out chứa số nguyên X tìm được thỏa mãn điều kiện của bài toán.
Ví dụ:
NTCN.Inp
NTCN.Out
3
4
12
15
13
Bài 3: Tìm đường hái quả (6,0 điểm):
Một khu vườn hình chữ nhật kích thước MxN được chia thành các ô vuông đơn vị để trồng một loại cây ăn quả. Trên mỗi ô thì số quả tương ứng có thể hái được là A[i,j] (1£i£M; 1£j£N).
Một người khách dạo qua vườn và hái tất cả các quả trên những ô đi qua. Vị trí xuất phát từ ô [1,1] và kết thúc tại ô [M,N] với hành trình là sang ô chung cạnh theo hướng tăng của i hoặc j (sang phải hoặc đi xuống - như hình vẽ). Hãy viết chương trình tìm lộ trình đi của người đó để hái được nhiều quả nhất.
1
3
5
7
2
7
9
4
2
2
2
3
1
6
7
7
4
6
2
5
Dữ liệu vào là tệp HAIQUA.INP có cấu trúc như sau:
- Dòng đầu tiên là hai số M, N nguyên dương cách nhau một khoảng cách (0<M,N<100).
- M dòng tiếp theo, mỗi dòng gồm N số tương ứng là số quả có thể hái được ở các ô theo thứ tự tại hàng thứ i. Mỗi số cách nhau một khoảng cách.
Dữ liệu ra là tệp HAIQUA.OUT cso cấu trúc như sau:
- Dòng đầu là số quả lớn nhất có thể hái được theo một lộ trình thỏa mãn yêu cầu.
- Dòng tiếp theo gồm M+N-1 số tương ứng là số quả hái ở từng ô theo đường đi để được số quả nhiều nhất. Mỗi số cách nhau ít nhất một khoảng cách.
Ví dụ:
HAIQUA.INP
HAIQUA.OUT
4 5
1 3 5 7 2
7 9 4 2 2
2 3 1 6 7
7 4 6 2 5
41
1 7 9 4 2 6 7 5
Bài giải tham khảo:
Câu 1: LienPS.Pas:
Uses 	Crt;
Var 	q:Array[1..100] of Word;
 	a,b,i,k:Word;
Function Uc(x,y:Word):Word;
Var r:Word;
Begin
 	While y0 do Begin	r:=x mod y;	x:=y;y:=r;End;
Uc:=x;
End;
Procedure Psrg;
Var m:Word;
Begin
m:=Uc(a,b);
a:=a div m;
b:=b div m;
End;
Procedure Xuli;
Begin
k:=0;
Repeat
If a>b then Begin q[k]:= a div b; a:= a mod b; End
 Else Begin q[k]:= b div a; b:= b mod a;End;
inc(k);
Until (a=1) or (b=1);
If a1 then q[k]:=a Else q[k]:=b;
 For i:=0 to k do Write(q[i],' ');
 End;
Begin
Clrscr;
Repeat
Write('Nhap a: '); Readln(a); Write('Nhap b: '); Readln(b);
Until (a>0) and (b>0);
Psrg;
If a<=b then Write(0,' ',b) Else Xuli;
Readln
End.
Câu 2: NTCN.Pas:
Uses	Crt;
Type 	mmc=Array[1..100] of Word;
Const 	fi='D:\Ntcn.Inp';
 	fo='D:\Ntcn.Out';
Var	i,n,m:Byte;
a:mmc;
f,g:Text;
Function	Uc(x,y:Word):Boolean;
Var r:Word;
Begin
While y0 do Begin r:=x mod y; x:=y; y:=r; End;
 If x=1 then Uc:=True Else Uc:=False;
End;
Function mUc(c:mmc;k:Byte;m:Word):Boolean;
Var	i:Byte;
kt:Boolean;
Begin
Kt:=True;
For i:=1 to k do Kt:=(Uc(m,c[i]) and Kt);
mUc:=Kt;
End;
Function	Max(c:mmc;k:Byte):Word;
Var 	i:Byte;
m:Word;
Begin
m:=a[1];
For i:=2 to k do If m<a[i] then m:=a[i];
 Max:=m;
End;
Begin
 	Assign(f,fi);
Reset(f);
Readln(f,n);
For i:=1 to n do
Readln(f,a[i]);
Close(f);
 	m:=Max(a,n)-1;
Assign(g,fo);
Rewrite(g);
Repeat
If mUc(a,n,m) then Begin Write(g,m); Close(g); Exit; End Else dec(m);
Until m=0;
End.
Câu 3: Haiqua.Pas:
Uses	Crt;
Const	fi='D:\Haiqua.Inp';
fo='D:\Haiqua.Out';
Type m2c=Array[1..100,1..100] of Word;
mmc=Array[1..100] of Word;
Var	i,j,k,m,n,max:Byte;
a:m2c;
b:mmc;
f,g:Text;
Begin
Assign(f,fi); Reset(f); Readln(f,m,n);
For i:=1 to m do
Begin
For j:=1 to n do Read(f,a[i,j]);
Readln(f);
 End;
Close(f);
 	max:=a[1,1];
k:=1;	i:=1;	j:=1;
fillchar(b,sizeof(b),0);
b[1]:=max;
 	While (i<=m) and (j<=n) do
Begin
inc(k);
If a[i+1,j]>a[i,j+1] then Begin inc(i); max:=max+a[i,j]; b[k]:=a[i,j]; End
Else
Begin
 If a[i+2,j]>a[i,j+2] then Begin inc(i); max:=max+a[i,j]; b[k]:=a[i,j]; End
 Else inc(j);
 max:=max+a[i,j]; b[k]:=a[i,j];
End;
End;
 	Dec(k);
Assign(g,fo);
Rewrite(g);
 	Writeln(g,max);
For i:=1 to k do Write(g,b[i],' ');
Close(g);
End.
{ Lưu ý:
1. Chưa Test đủ các trường hợp:	a[i+h,j] và a[i,j+k] (1<h<M-1;1<k<N-1);
1
3
5
7
2
7
9
4
2
2
2
3
9
6
7
7
4
6
2
5
	2. Trường hợp đầu bài chưa chặt chẽ: Giới hạn số quả tại mỗi A[i,j].
1
3
99
7
2
7
9
4
2
2
2
3
1
6
7
7
99
6
2
5

# data[].attributes.attachment_link.keywords[]
kỳ thi chọn học sinh giỏi cấp tỉnh lớp 9 thcs môn tin học

# data[].attributes.attachment_link.keywords[]
ky thi chon hoc sinh gioi cap tinh lop 9 thcs mon tin hoc

# data[].attributes.attachment_link.title
Kỳ thi chọn học sinh giỏi cấp tỉnh lớp 9 THCS môn Tin học

# data[].attributes.attachment_link.description
SỞ GIÁO DỤC ĐÀO TẠO KỲ THI CHỌN HỌC SINH GIỎI CẤP TỈNH LỚP 9 THCS BÌNH ĐỊNH KHÓA NGÀY: 18-3-2015 ĐỀ CHÍNH THỨC Môn thi: TIN HỌC Thời gian: 150 phút (không kể thời gian phát đề) Ngày thi: 18/3/2015 Tổng quan bài thi:

# data[].attributes.attachment_link.title
Tải Themis – phần mềm chấm bài tự động và so sánh code - Blog Chia Sẻ Kiến Thức

# data[].attributes.attachment_link.description
Chắc hẳn trong lúc làm bài tập tin học các bạn đều muốn biết được bài làm của mình đạt đến mức độ nh

# data[].attributes.attachment_link.readable_text
Tin học là môn học khoa học có tính thực tiễn cao, luôn đòi hỏi người học không chỉ có lĩnh hội những kiến thức trên lớp mà còn cần phải có những hiểu biết thực tế rộng gắn liền với môn Tin học thì việc học mới thực sự có hiệu quả và dễ nhớ kiến thức. Trong thực tế hiện nay, sự hiểu biết thực tế của các em về kiến thức thực tế môn Tin học lại rất hạn chế. Vì vậy khi học, các em sẽ trở nên bị động, không vận dụng được kiến thức đã học vào thưc tiễn. Do đó, khi ghi nhớ kiến thực học sinh dễ quên. Cũng vì lẽ đó, môn Tin học THPT luôn được học sinh xem là một môn học khó và thiếu hứng thú học tập.
Lập trình là vấn đề tương đối mới đối với học sinh THPT. Trong quá trình lập trình nếu học sinh không nắm vững các kiến thức để viết chương trình thì thường dẫn đến các sai sót dẫn tới chương trình không đạt được kết quả như mong muốn.

Môn Tin học không phải là môn khoa học lý thuyết thuần túy vì vậy học sinh không thể nhớ nếu như không hiểu bài. Việc giáo viên bắt học sinh ghi nhớ thụ động từng nội dung trong sách giáo khoa là một điều cực khó, cho dù học sinh có cố gắng ghi nhớ thì vẫn bị lẫn lộn. Hơn nữa, khi gặp các bài toán phải sử dụng kiểu dữ liệu lớn nhiều em lúng lúng. Việc giải các bài toán với kiểu dữ liệu lớn thực sự cần thiết cho các em khi làm các bài toán lập trình trong chương trình Tin học phổ thông nói riêng và việc giải quyết các bài toán thực tế nói chung.

Trong chương trình sách giáo khoa Tin học 11 có giới thiệu các kiểu dữ liệu số nguyên. Kiểu dữ liệu nguyên lớn nhất mà các em được biết đó là kiểu số nguyên lớn (longint) có phạm vi -2147483648 .. 2147483647. Nhiều em học sinh cho rằng, ngôn ngữ lập trình Pascal chỉ có thể giải được các bài toán có phép tính trong khoảng số nguyên lớn mà các em được biết. Tin học là môn trong những môn học được ứng dụng nhiều trong thực tế. Trong thực tế cần phải giải quyết các bài toán, phép toán với các số rất lớn. Việc các em có thể giải được các bài toán với số nguyên lớn thực sự cần thiết. Thông qua đó, các em có thể giải các bài toán trong thực tế, góp phần đưa kiến thức học lập trình tin học vào đời sống.

- Sử dụng các phép tính toán trên xâu để tính kết quả. Trong khi tính toán cần sử dụng hiệu quả các thủ tục chuyển đổi kí tự kiểu xâu thành số và ngược lại từ số thành xâu.
- Hiện thị kết quả dạng xâu (hoặc mảng).

Bài toán này có nhiều cách giải sau đây là lời giải tự nhiên nhất nhưng cũng rất hiệu quả và dễ hiểu như sau:

- Hai số được lưu dưới dạng xâu. Các số có thể đọc ra từ tệp lưu vào biến kiểu xâu hoặc các số có thể được nhập từ màn hình lưu vào biến kiểu xâu.
- So sánh độ dài hai xâu, tìm độ dài xâu lớn nhất.
- Thêm kí tự '0' vào xâu có độ dài ngắn hơn để hai xâu bằng nhau.
- Thực hiện phép cộng hai xâu có độ dài bằng nhau. Thực hiện phép cộng từ cuối lên đầu (tương tự như cộng ở số được thực hiện từ hàng đơn vị). Trong quá trình cộng có sử dụng thủ tục trung gian chuyển đổi từ xâu sang số và ngược lại (lưu ý phần nhớ của phép cộng).
- Kết quả đưa trực tiếp vào xâu.
- Hiển thị kết quả dạng xâu.

- Hai số được nhập từ bàn phím và lưu vào hai biến kiểu xâu st1 và st2.
- So sánh hai xâu st1 và st2. Thêm kí tự '0' vào xâu ngắn hơn để hai xâu có độ dài bằng nhau.
- Thực hiện phép cộng hai xâu có có độ dài bằng nhau, cộng từ cuối lên đầu (tương tự như cộng ở số được thực hiện từ hàng đơn vị). Các kí tự trong xâu lần lượt chuyển thành số (sử dụng thủ tục chuyển đổi) rồi thực hiện phép cộng. Kết quả cộng các số được chuyển ngược lại thành xâu (h1).

if tam>=10 Then nho:=1 Else nho:=0;

- Sử dụng xâu kết quả (h) lưu trữ kết quả các phép cộng (lưu ý phần nhớ)

- Trong chương trình có sử dụng chương trình con
- Chương trình trên thực hiện việc cộng hai số được nhập từ bàn phím.
Cong(s1,s2:String): String để tính kết quả phép cộng hai xâu s1, s2.
- Kết quả phép cộng được hiện lên trên màn hình.
- Ta có thể thay đổi chương trình bằng cách sử dụng tệp để đọc dữ liệu vào và ghi kết quả ra.

- Ngoài ra ta có thể sử dụng tệp để đọc các số nguyên lớn vào và ghi kết quả ra

- Hai số được lưu dưới dạng xâu. Các số có thể đọc ra từ tệp lưu vào biến kiểu xâu hoặc các số có thể được nhập từ màn hình lưu vào biến kiểu xâu.
- So sánh độ dài hai xâu, tìm độ dài xâu lớn nhất
- Thêm kí tự '0' vào xâu có độ dài ngắn hơn để hai xâu bằng nhau.
- So sánh hai xâu có độ dài bằng nhau.
+ Nếu xâu lưu số bị trừ lớn hơn xâu lưu số trừ. Thực hiện phép trừ hai xâu từ cuối lên đầu (tương tự như phép trừ trong toán học). Sử dụng thủ tục chuyển đổi xâu thành số trong quá trình tính toán.
+ Nếu xâu lưu số bị trừ bé hơn xâu lưu số trừ thực hiện đặt dấu trừ (-) vào phần đầu kết quả, đồng thời thực hiện hoán đổi hai xâu cho nhau và thực hiện phép trừ tương tự như ở trên.

- Nhập hai số từ bàn phím lưu vào hai biến xâu st1, st2.

+ Nếu xâu lưu số bị trừ lớn hơn xâu lưu số trừ. Thực hiện phép trừ hai xâu từ cuối lên đầu (tương tự như phép trừ trong toán học). Sử dụng thủ tục chuyển đổi xâu thành số trong quá trình tính toán.
+ Nếu xâu lưu số bị trừ bé hơn xâu lưu số trừ thực hiện đặt dấu trừ (-) vào phần đầu kết quả, đồng thời thực hiện hoán đổi hai xâu cho nhau và thực hiện phép trừ tương tự như ở trên.
- Phép trừ được thực hiện như sau:

Các kí tự sâu St2 được chuyển thành số và lưu vào mảng h2.
Thực hiện phép trừ hai mảng h1 và h2 (lưu ý trương hợp số bị trừ bé hơn số trừ)
Nếu h1[i]<h2[i] thì c[i]:=h1[i]+10-h2[i]; và h2[i-1]:=h2[i-1]+1; ngược lại nếu h1[i]>=h2[i] thì c[i]:=h1[i]-h2[i];
- Mảng C thu được chính là kết quả.

Kết quả phép trừ được lưu vào một mảng. Để hiện thị kết quả, ta chỉ cần hiển thị lần lượt các phần tử trong mảng. Khi hiện thỉ cần chú ý tới phần dấu của phép trừ (nếu số bị trù bé hơn số trừ ghi vào kết quả dấu )

- Tương tự như các bài ở trên, ta có thể thay đối cách vào ra dữ liệu bằng cách sử dụng tệp để đọc dữ liệu vào và ghi kết quả ra.

- Hai số được lưu dưới dạng xâu. Các số có thể đọc ra từ tệp lưu vào biến kiểu xâu hoặc các số có thể được nhập từ màn hình lưu vào biến kiểu xâu.
- Thực hiện phép nhân lần lượt các kí tự (đã dùng thủ tục chuyển thành số) trong hai xâu.

- Xử lý mảng kết quả ta thu được kết quả phép nhân.

- Chương trình trên thực hiện phép nhân hai số lớn được nhập từ bàn phím. Kết quả phép nhân được hiển thị trên màn hình.
- Lưu ý: Khi sử dụng mảng để lưu kết quả phép nhân, độ dài của mảng kết quả lớn hơn hoặc bằng tổng độ dài của hai số (xâu).
- Ta có thể thay đôi kiểu vào ra dữ liệu cho chương trình trên bằng cách sử dụng kiểu dữ liệu tệp.

Ngôn ngữ lập trình nói chung đóng vai trò rất quan trọng trong việc xây dựng các chương trình ứng dụng để phục vụ cho cuộc sống. Nhờ sự phát triển của tin học (trong đó các nhà lập trình chuyên nghiệp đóng vai trò không nhỏ) mà hiện nay hầu hết các lĩnh vực trong xã hội đã ứng dụng được tin học để giải quyết công viêc nhanh, hiệu quả và chính xác hơn.
Hiện nay, ngôn ngữ lập trình Pascal đã trở thành ngôn ngữ lập trình phổ biến nhất trên thế giới sử dụng trong lĩnh vực giảng dạy. Trong quá trình giảng dạy, các thầy cô có thể đưa ra các vấn đề như lập trình các game nhỏ...để các em có thể chứng tỏ được khả năng của mình làm cho học sinh yêu thích môn học, ham học hỏi và sáng tạo.
Đề tài này mang tính thực tiễn rất cao cụ thể là: Các em có thể sử dụng kiến thức lập trình để gải các bài toán thực tế thường gặp, các bài toán tính toán với số lớn. Kết quả là có rất nhiều em đã dễ dàng vận dụng được kiến thức để giải các bài toán lặp do giáo viên đặt ra.

# data[].attributes.attachment_link.title
Chuyên đề xử lý số nguyên lớn trong Pascal