Tải bản đầy đủ (.docx) (26 trang)

KIẾN THỨC TỔNG QUÁT HSG THÀNH PHỐ môn TIN 8

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (87.73 KB, 26 trang )

CÁC DẠNG BÀI PASCAL
I.

Số học:
1. Kiểm tra số nguyên tố
2. Kiểm tra số chính phương
3. Kiểm tra số hồn hảo
4. Kiểm tra số song tố
5. Phân tích ra thừa số nguyên tố
6. In ra dãy Fibonnacci
7. Giai thừa của một số ngun
8. Tích lũy thừa
9. Tìm UC, UCLN, BCNN
10. In ra số lớn nhất (Max) và số nhỏ nhất (Min)
11.Thay đổi vị trí của số lớn nhất (Max) và số nhỏ nhất (Min)
12. Cộng, trừ, nhân, chia các phân số
13. Rút gọn phân số
14. Sắp xếp theo vị trí tăng dần, giảm dần
15. Đổi số thập phân qua phân số
16. Biến đổi hỗn số thành phân số và ngược lại
II.
Xâu string:
1. In ra tổng các chữ số
2. Đếm xem có bao nhiêu ký tự chữ, ký tự số
3. In ra từ có nhiều chữ nhất
4. Trộn hai mảng tạo thành 1 mảng mới, sắp xếp vị trí tăng dần,
giảm dần
5. Chuẩn hóa xâu ( chuyển xâu sang dạng: chữ đầu tiên viết hoa
(đối với họ tên thì chữ cái đầu mỗi từ viết hoa), xóa dấu cách
thừa, xóa dấu cách đầu và cuối, v.v…)
6. Kiểm tra xâu đối xứng, số đối xứng


7. Xóa ký tự thứ k trong xâu
III. Các hàm của xâu
1. Chi tiết
IV. Các bài toán tổng hợp phức tạp:
1. Mã hóa, giải mã xâu ( theo yêu cầu đề bài)
2. Tìm số nguyên tố trong xâu st: Đây nè :))
V.
Các đề thi mẫu:
1. Đề mẫu & đáp án (nếu có)
2. Bài làm

1


MỤC LỤC

2


I.

SỐ HỌC

Kiểm tra số nguyên tố:
Function snt(n:longint):boolean;
Var i:longint;
Begin
Snt:=false;
If n<2 then exit;
For i:=2 to trunc(sqrt(n)) do

If n mod i = 0 then exit;
Snt:=true;
End;
Kiểm tra số chính phương:
Function scp(n:longint):boolean;
Var a:longint; b:real;
Begin
Scp:=false;
B:=sqrt(a);
If sqr(b)=a then scp:=true
Else scp:=false;
End;
Kiểm tra số hoàn hảo:
Function so_hoan_hao(n:longint):boolean;
3


Var s,i:longint;
Begin
For i:= 1 to n-1 do
If n mod i = 0 thens:=s+i;
If s = n then so_hoan_hao:=true
Else so_hoan_hao:=False;
End;
Kiểm tra số song tố:
function snt(n:longint):boolean;
var i:longint;
begin
snt:=false;
if n<2 then exit;

for i:=2 to trunc(sqrt(n)) do
if n mod i = 0 then exit;
snt:=true;
end;
function sst(n:longint):boolean;
var st1,st2:string; a,code,dem,i:longint;
begin
sst:=false;
if n<2 then exit;
if snt(n)=true then dem:=dem+1;
str(n,st1);
for i:=length(st1) downto 1 do
st2:=st2+st1[i];
4


val(st2,a,code);
if snt(a)=true then dem:=dem+1;
if dem=2 then sst:=true;
end;
Phân tích ra thừa số nguyên tố:
uses crt;
var i,n:longint;
var count:longint;
begin
clrscr;
writeln('Nhap n: ');
readln(n);
count:= 0;
i:=2;

while (n +1 > i ) do
begin
if n mod i = 0 then
begin
if count <> 0 then
begin
write('.');
end;
write(i);
n:=n div i;
count:= count + 1;
i:=1;
5


end;
i:=i+1;
end;
readln;
end.
In ra dãy Fibonnacci:
uses crt;
var i,n,a,b,c:longint;
begin
clrscr;
writeln('Nhap n: '); readln(n);
a:=1; b:=1;
writeln('Day Fibonnacci la: ');
write(a,' ');
write(b);

for i:=3 to n do
begin
c:=a+b;
a:=b;
b:=c;
write(' ',c,' ');
end;
readln;
end.
Giai thừa của một số nguyên:
Uses crt;
6


Var I,s:longint;
Beign
Clrscr;
Writeln(‘Nhap n: ‘); readln(n);
S:=1;
For i:=1 to n do
S:=s*I;
Writeln(n,’! = ‘,s);
Readln;
End.
Tĩnh lũy thừa:
Function lt(a,n:integer):longint;
Var i:integer; s:longint;
Begin
s:=1;
For i:=1 to n do

s:=s*a;
lt:=s;
End;
Tìm UC, UCLN, BCNN
Uses crt;
Var uc,bc,ucln,bcnn,a,b,i:longint;
Begin
Clrscr;
Writeln('Nhap 2 so a,b: '); readln(a,b);
Bcnn:=a*b;
While a<>b do
If a>b then a:=a-b else b:=b-a;
7


Ucln:=b;
Bcnn:=bcnn div ucln;
writeln('UCLN: ',ucln);
writeln('BCNN: ',bcnn);
for i:=1 to a do
if a mod i = 0 then
if b mod i = 0 then writeln(i);
Readln;
End.

1. In ra số lớn nhất (Max) và số nhỏ nhất (Min):
Uses crt;
Var i,n,max,min:longint; a:array[1..1000] of longint;
Begin
Writeln(‘Nhap n: ‘);

Readln(n);
For i:=1 to n do readln(a[i]);
Max:=a[1];
Min:=a[1];
For i:=1 to n do
Begin
If maxIf min>a[i] then min:=a[i];
End;
Writeln(‘Max: ‘,max);
Writeln(‘Min: ‘,min);
Readln;
End.

8


2. Thay đổi vị trí của số lớn nhất (Max) và số nhỏ nhất
(Min)
uses crt;
var i,n,max,min,c,d,dem:longint;
a,b:array[1..1000] of longint;
begin
clrscr;
writeln('Nhap n: ');
readln(n);
for i:=1 to n do readln(a[i]);
for i:=1 to n do b[i]:=a[i];
max:=a[1];
min:=a[1];

for i:=1 to n do
begin
if maxif min>a[i] then min:=a[i];
end;
dem:=1;
for i:=1 to n do
begin
if max=a[i] then c:=i;
if (min=a[i]) and (dem=1) then
begin
d:=i;
dem:=dem+1;
end;
end;
9


for i:=1 to n do
begin
if (b[i] = max) and (i=c) then a[i]:=min;
if (b[i] = min) and (i=d) then a[i]:=max;
end;
for i:=1 to n do writeln(a[i]);
readln;
end.

3. Cộng, trừ, nhân, chia các phân số
var a,b,c,d:longint;
function ucln(a,b:longint):longint;

var

r:longint;

begin
while a mod b <>0 do
begin
r:=a mod b;
a:=b;
b:=r;
end;
exit(b);
end;
procedure cong(a,b,c,d:longint);
var

tu, mau,UC:longint;

begin
tu:=a*d+b*c;
mau:=b*d;
UC:=ucln(tu,mau);
10


tu:=tu div uc;
mau:=mau div uc;
if mau=1 then
writeln(a,'/',b,' + ',c,'/',d,' = ',tu)
else

writeln(a,'/',b,' + ',c,'/',d,' = ',tu,'/',mau);
end;
procedure tru(a,b,c,d:longint);
var

tu, mau,UC:longint;

begin
tu:=a*d-b*c;
mau:=b*d;
UC:=ucln(tu,mau);
tu:=tu div uc;
mau:=mau div uc;
if mau=1 then
writeln(a,'/',b,' - ',c,'/',d,' = ',tu)
else
writeln(a,'/',b,' - ',c,'/',d,' = ',tu,'/',mau);
end;
procedure nhan(a,b,c,d:longint);
var

tu, mau,UC:longint;

begin
tu:=a*c;
mau:=b*d;
UC:=ucln(tu,mau);
11



if tu=0 then
begin
writeln(a,'/',b,' * ',c,'/',d,' = ',0);
exit;
end;
tu:=tu div uc;
mau:=mau div uc;
if mau=1 then
writeln(a,'/',b,' * ',c,'/',d,' = ',tu)
else
writeln(a,'/',b,' * ',c,'/',d,' = ',tu,'/',mau);
end;
procedure chia(a,b,c,d:longint);
var

tu, mau,UC:longint;

begin
tu:=a*d;
mau:=b*c;
UC:=ucln(tu,mau);
if tu=0 then
begin
writeln(a,'/',b,' : ',c,'/',d,' = ',0);
exit;
end;
tu:=tu div uc;
mau:=mau div uc;
if mau=1 then
writeln(a,'/',b,' : ',c,'/',d,' = ',tu)

12


else
writeln(a,'/',b,' : ',c,'/',d,' = ',tu,'/',mau);
end;
begin
read(a,b,c,d);
cong(a,b,c,d);
tru(a,b,c,d);
nhan(a,b,c,d);
chia(a,b,c,d);
readln;
readln;
end.

4. Rút gọn phân số:
uses crt;
var ucln,a,b,tu,mau:longint;
begin
clrscr;
writeln('Nhap phan so A/B: '); readln(a,b);
tu:=a;
mau:=b;
while a<>b do
if a>b then a:=a-b
else b:=b-a;
ucln:=b;
tu:=tu div ucln;
mau:=mau div ucln;

if mau=1 then writeln(tu)
13


else writeln(tu,'/',mau);
readln;
end.

5. Sắp xếp theo vị trí tang dần, giảm dần:
uses crt;
var i,j,tam,n:longint; a:array[1..1000] of longint;
begin
clrscr;
writeln('Nhap n: '); readln(n);
for i:=1 to n do readln(a[i]);
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i]>a[j] then
begin
tam:=a[i];
a[i]:=a[j];
a[j]:=tam;
end;
for i:=1 to n do write(a[i]:3);
writeln;
for i:=n downto 1 do write(a[i]:3);
readln;
end.

6. Chuyển số thập phân qua phân số:

Uses crt;
var a,c,tu,mau,tu2,mau2,ucln:real;
dem,i,d,j,b,code:longint;
st,st2:string;
14


begin
clrscr;
writeln('Nhap vao so thap phan: '); readln(st);
for i:=1 to length(st) do
if st[i]='.' then
for j:=i+1 to length(st) do
inc(dem);
val(st,a,code);
c:=exp(dem*ln(10));
d:=round(c);
tu:=a*d;
mau:=d;
tu2:=tu;
mau2:=mau;
while tu<>mau do
if tu>mau then tu:=tu-mau
else mau:=mau-tu;
ucln:=mau;
tu2:=round(tu2) div round(ucln);
mau2:=round(mau2) div round(ucln);
writeln(tu2:0:0,'/',mau2:0:0);
readln;
end.


7. Biến đổi hỗn số thành phân số và ngược lại
uses crt;
var a,b,c,tu,mau:longint;
begin
clrscr;
15


writeln('Nhap hon so co dang c a/b: ');
write('c= '); readln(c);
write('a= '); readln(a);
write('b= '); readln(b);
tu:=a+c*b;
mau:=b;
writeln(tu,'/',mau);
readln;
end.
uses crt;
var a,b,c:longint;
begin
clrscr;
writeln('Nhap phan so A/B: '); readln(a,b);
if b=0 then
begin
writeln('Nhap lai phan so A/B vi B=0: ');
readln(a,b);
end;
if aelse c:= a div b;

a:=a mod b;
writeln(c,' va ',a,'/',b);
readln;
end.

II. XÂU STRING:
1.In ra tổng các chữ số
uses crt;
16


var st:string; a,s,code,i:longint;
begin
clrscr;
writeln('Nhap so: '); readln(st);
for i:=1 to length(st) do
begin
val(st[i],a,code);
s:=s+a;
end;
writeln(s);
readln;
end.

2.Đếm xem có bao nhiêu ký tự chữ, ký tự số
uses crt;
var st:string; dem1,dem2,i:longint;
begin
clrscr;
writeln('Nhap xau st: '); readln(st);

for i:=1 to length(st) do
begin
if st[i] in ['a'..'z','A'..'Z'] then inc(dem1);
if st[i] in ['0'..'9'] then inc(dem2);
end;
writeln('Co ',dem1,' ky tu chu');
writeln('Co ',dem2,' ky tu so');
readln;
end.

17


3.In ra từ có nhiều chữ nhất
uses Crt;
var i,j,dem,max:longint;st,st2:string;
begin
clrscr;
readln(st);
for i:=1 to length(st) do
if st[i] <>' ' then
begin
dem:=dem+1;
if max < dem then max:=dem
end
else dem:=0;
writeln(max);
dem:=0;
for i:=1 to length(st) do
if st[i] <>' ' then

begin
dem:=dem + 1;
if dem = max then
writeln(copy(st,i-max+1,max));
end
else dem:=0;
readln
end.

18


4.Trộn hai mảng tạo thành 1 mảng mới, sắp xếp vị trí tăng
dần, giảm dần
5.Chuẩn hóa xâu ( chuyển xâu sang dạng: chữ đầu tiên
viết hoa (đối với họ tên thì chữ cái đầu mỗi từ viết hoa),
xóa dấu cách thừa, xóa dấu cách đầu và cuối, v.v…)
procedure chuanhoa(st:string);
var i:longint;
begin
while st[1]=' ' do delete(st,1,1);
while st[length(st)]=' ' do delete(st,length(st),1);
for i:=1 to length(st) do
if (st[i]=' ') and (st[i+1]=' ')
then delete(st,i,1);
st[1] := Upcase(st[1]);
for i := 2 to length(st) do
if st[i-1]=' ' then st[i] := Upcase(st[i])
else
if st[i] in ['A'..'Z'] then

st[i] := chr(ord(st[i]) + 32);
end;

6.Kiểm tra xâu đối xứng, số đối xứng
{Giống nhau}
uses crt;
var st,st2:string; i:longint;
begin
clrscr;
writeln('Nhap so/chu: '); readln(st);
19


for i:=length(st) downto 1 do
st2:=st2+st[i];
if st=st2 then writeln('Doi xung')
else writeln('Khong doi xung');
readln;
end.

7.Xóa ký tự thứ k trong xâu ( các bài nhỏ )
Viết chương trình nhập mảng gồm n (n<=100) phần tử rồi chèn vào một số
bất kỳ vào một vị trí nào đó trong mảng, số cần chèn và vị trí chèn nhập từ
bàn phím.
Program Chen;
Uses crt;
Var i,spt, so,vitri: Integer;
A: Array[1..100] Of Integer;
Begin
Clrscr;

Writeln(' + CHEN MOT SO VAO MANG +');
Writeln('-------------------------------');
Write('-Co bao nhieu phan tu-: ');
Readln(spt);
For i:=1 To spt Do
Begin
Write('-Phan tu A[',i,']= '); Readln(a[i]);
End;
Writeln; Writeln('--MANG TRUOC KHI CHEN--');
For i:=1 To spt Do Write(a[i]: 6); Writeln;
Write('-Can che so: ');
Readln(so); Write('-Vao vi tri: ');
20


Readln(vitri);
For i:=spt+1 Downto Vitri+1 Do Writeln;
a[i]:=a[i-1]; a[vitri]:=so; spt:=spt+ 1;
Writeln('MANG SAU KHI CHEN');
Readln;
For i:=1 To spt Do Write(a[i]: 6);
End.
Viết chương trình nhập mảng gồm n (n<=100)phần tử rồi xóa đi một phần
tử nào đó có vị trí nhập từ bàn phím
Program Xoa_Pt;
Var i,spt,vitri: Integer;
a: Array[1..100] Of Integer;
Begin
Writeln('--XOA PHAN TU TRONG MANG--');
Writeln('------------------------------------------------------');

Writeln;
Write('-Mang co bo nhieu phan tu- ');
Readln(spt);
For i:=1 To spt Do
Begin
Write('-Phan tu A[',i: 2,']= ');
Readln(A[i]);
End;
Writeln;
Writeln(' --MANG TRUOC KHI XOA--');
Writeln('--------------------------------------------------------');
Writeln;
For i:=1 To spt Do Write(a[i]: 6);
21


Writeln;
Writeln;
Write('-Vi tri muon xoa: '); Readln(vitri);
For i:=vitri to spt - 1 Do a[i]:=a[i+1];
spt:=spt - 1;
Writeln;
Writeln(' MANG SAU KHI XOA');
Writeln('- -----------------------------------');
Writeln;
For i:=1 to spt Do Write(a[i]: 6);
Writeln; Writeln;
Writeln(' Bam phim de ket thuc ');
Readln
End.

Viết chương trình nhập mảng gồm n (n<=100)phần tử rồi xóa đi những
phần tử trùng nhau trong mảng và in ra màn hình phần tử sau khi đã bỏ bớt.
Program Bo_so_trung;
Uses crt;
Const Max=100;
Var A: Array[1..Max] Of Integer;
i,j,k,n: Integer;
Begin
Writeln('XOA BO CAC SO TRUNG NHAU');
Writeln('-----------------------------------------------');
Writeln;
Write('-Nhap so phan tu mang: '); Readln(n);
For i:=1 To N Do
Begin
22


Write('-Phan tu A[',i,']= ');
Readln(a[i]);
End;
i:=2;
While i <= N Do
Begin
j:=1;
While a[j] <> a[i] Do
j:=j+1;
If j < i Then
Begin
For k:=i to n-1 Do
a[k]:=a[k+1];

n:=n-1;
End
Else
i:=i+1;
End;
Writeln;
Write('-Mang con lai: ');
For i:=1 to n Do Write(a[i]: 8);
Writeln;
Writeln(' Bam phim de ket thuc ');
Readln
End.

23


III. Các hàm của xâu:
a/ Hàm length(st): cho độ dài thực của xâu ký tự
ví dụ: st:=’le thanh’ thì LENGTH(st) cho bằng 8.
b/ Thủ tục DELETE(st, pos, num): xóa num ký tự trong xâu st kể từ vị
trí pos
Ví dụ: st= ‘FILENAME’
Delete(st,5,4) lúc đó st cho ra là ‘FILE’
c/ Thủ tục INSERT(obj, st, pos): Thủ tục cho kết quả bằng cách chèn
xâu ký tự có tên là Obj vàoxâu st tại vị trí pos, những ký tự đứng sau
pos sẽ được dời vềphía sau của xâu ký tự obj.
Ví dụ: obj:= ‘Thanh ‘
st:=’Le Lam’;
INSERT(obj,st,4) lúc đó st=’Le Thanh Lam’;
d/ Thủ tục STR(value, st): Thủ tục này thực hiện việc chuyển đối giá trị

kiểu số(value) sang dạng xâu ký tự và gán cho biến st.
Ví dụ: n là một só ngun có giá trị: n:=150;
STR(n:5,st) sẽ cho kết quả xâu st là: st=’ 150’;
e/ Thủ tục VAL(st, value,code) đối một xâu ký tự st sang dạng số và gán
cho biến value, nếu biến đối thành cơng thì code sẽ nhận giá trị bằng 0.
ngược lại thì cho giá trị khác khơng
Ví dụ: VAL(‘123’,value,code) lúc này code sẽ nhận giá trị bằng 0 và
value=123
f/ Hàm COPY(st, pos, num): sao chép trong xâu st, num ký tự tại vị trí
pos,
Ví dụ: st=’Le Thanh Lam’
COPY(st,4,5) = ‘Thanh’;
g/ Hàm CONCAT(s1,s2,…,sn): hàm cho ra 1 xâu mới bằng cách nối
đi các xâu s1,s2,…,sn lại với nhau.
Ví dụ: CONCAT(‘Le ’,’Thanh ‘, ‘Lam’) = ‘Le Thanh Lam’;
h/ Hàm POS(st1,st2): hàm cho tavị trí tìm thấy đầu tiên của xâu s1 trong
xâu s2.
Ví dụ: POS(‘Lam’,‘Le Thanh Lam’) = 10;

24


VI. Các bài tốn tổng hợp phức tạp:
1. Mã hóa, giải mã xâu ( theo yêu cầu đề bài)

2.

Tìm số nguyên tố trong xâu st:

uses Crt;

var i,a,code:longint;st,st1:string;
function snt(n:longint):boolean;
var i:longint;
begin
snt:=false;
if n<2 then exit;
for i:=2 to trunc(sqrt(n)) do
if n mod i = 0 then exit;
snt:=true;
end;
begin
clrscr;
readln(st);
for i:=1 to length(st) do
begin
if st[i] in ['0'..'9'] then st1:=st1+st[i];
if st[i] in ['A'..'z'] then
begin
val(st1,a,code);
if snt(a) = true then writeln(a);
delete(st1,1,length(st1));
end;
end;
readln
end.
25