Một số bài tập ôn thi học sinh giỏi môn Tin học Lớp 12

Bài số 1. Dấu các phép tính

Cho biểu thức sau: ((((a1 ? a2) ? a3) ? a4) ? a5) ? a6 = n

Viết chương trình tìm tất cả các cách thay thế các dấu ? bởi các phép tính +, -, *, / để thoả mãn biểu thức trên. Với n bất kỳ nhập từ bàn phím.

Dữ liệu vào: Vào từ File văn bản B3in.txt có cấu trúc như sau:

 - Dòng đầu tiên ghi giá trị n

 - Dòng thứ hai ghi các số a1, a2, a3, a4, a5, a6

Dữ liệu ra: Ghi ra file văn bản B3out.txt các cách thay thế các dấu ? bởi các phép tính +, -, *, / để thoả mãn biểu thức trên. Ví dụ:

Chương trình tham khảo

Uses Crt;

Const Dau : Array[1.4] Of Char = ('+', '-', '*', '/');

Var i, j, k, l, m, dem : Integer;

a : Array[1.7] Of Real;

Procedure Input;

Var t : Integer;

Begin

Writeln('Chuong trinh dien phep toan vao dau "?"');

Writeln('(((((a1?a2)?a3)?a4)?a5)?a6) = a7');

For t := 1 To 7 Do

Begin

Write('a',t,'=');

Readln(a[t]);

End;

Writeln;

End;

Procedure Print;

Var t : Integer;

Begin

Inc(Dem);

Write('(((((',a[1]:0:0,dau[i],a[2]:0:0,')');

Write(Dau[j],a[3]:0:0,')',dau[k],a[4]:0:0,')');

Write(Dau[l],a[5]:0:0,')',dau[m],a[6]:0:0,')');

Writeln('=',a[7]:0:0);

End;

 

 

doc16 trang | Chia sẻ: lethuong715 | Lượt xem: 508 | Lượt tải: 0download
Bạn đang xem nội dung tài liệu Một số bài tập ôn thi học sinh giỏi môn Tin học Lớp 12, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
ktrahhao:=true;
end;
begin;
write('moi nhap n,m: ');
readln(n,m);
for j:=n to m do
 if ktrahhao(j) then writeln(j);
 readln;
end.
Viết chương trìnhtạo một mảng số nguyên gồm n phần tử nhỏ hơn 1000. Sắp xếp mảng theo tứ tự tăng dần và giảm dần.
const n=10;
var i,j,tam:integer;
 a:array[1..n]of integer;
begin
randomize;
for i:=1 to n do a[i]:=random(1000);
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
 writeln(a[i]);
readln;
end.
Viết chương trìnhđọc một số có 3 chữ số nhập vào từ bàn phím?
uses crt;
Var s:array[1..9] of string;
 a,b,c,n:integer;
begin
clrscr;
repeat
write('nhap so nguyen n:');readln(n);
until (n>99)and(n<1000);
a:=n div 100;
b:=n div 10 mod 10 ;
c:=n mod 10;
s[1]:='mot';
s[2]:='hai';
s[3]:='ba';
s[4]:='bon';
s[5]:='nam';
s[6]:='sau';
s[7]:='bay';
s[8]:='tam';
s[9]:='chin';
if (b=0)and(c=0) then write(s[a],'tram');
if (b=0)and(c0)then write(s[a],'tram linh',s[c]);
if (b0)and (c=0)then write(s[a],'tram',s[b],'muoi');
if (b0)and(c=5)then write(s[a],'tram',s[b],'lam');
if (b0)and(c0)and(c5)then write(s[a],'tram',s[b],'muoi',s[c]);
readln
end.
Viết chương trìnhsửa danh từ riêng bị nhập sai. (VD: TraN QuANG kHai à Tran Quang Khai)
uses crt;
var s:string;
 i:integer;
begin
write('nhap mot danh tu rieng:');readln(s);
while s[1]=#32 do delete(s,1,1);
while s[length(s)]=#32 do delete(s,length(s),1);
while pos(#32#32,s)0 do delete(s,pos(#32#32,s),1);
for i:=1 to length(s) do
 if (s[i]>=' A')AND(s[i]<='Z')then s[i]:=chr(ord(s[i])+32) ;
s[1]:=upcase(s[1]);
for i:=1 to length(s) do
if s[i]=#32then s[i+1]:=upcase (s[i+1]);
write('danh tu duoc sua lai la:',s);
readln; end.
Viết chương trìnhin ngược các từ của một xâu, mỗi từ in ra trên một dòng và xuất ra số ký tự của mỗi từ?
	( vd: Tran Quang Khai à Khai : 4 ký tự
	 Quang : 5 ký tự
	 Tran : 4 ký tự
uses crt;
var s,s1,s2,t:string;
 a:array[1..100] of string;
 b:array[1..100] of integer;
 i,j,k:integer;
begin
clrscr;
write(' Nhap xau s:');readln(s);
s:=s+' ';
for i:= 1 to length(s) do
 if s[i]#32 then t:=t+s[i]
 else begin
 inc(j);
 a[j]:=t;
 t:='';
 end;
for i:=1 to j do b[i]:=length(a[i]);
for k:=i downto 1 do writeln(a[k]:20,' :',b[k]:4,' ky tu');
readln;
end.
Viết chương trình tách một xâu S ra thành 4 xâu: S1: chứa các chữ cái in HOA, S2: chứa các chữ cái thường; S3 chứa các số 0à9; S4 chứa các ký tự khác( :;><?/’”!@#$%^&*...)
uses crt;
var hoa,thuong,so:set of char;
 s,s1,s2,s3,s4:string;
 i:integer ;
begin
clrscr;
write('nhap xau s:');readln(s);
hoa:=['A'..'Z'];
thuong:=['a'..'z'];
so:=['0'..'9'];
for i:=1 to length(s) do
 if s[i] in hoa then s1:=s1+s[i] 
	 else if s[i] in thuong then s2:=s2+s[i] 
	 else if s[i] in so then s3:=s3+s[i] 
	 else s4:=s4+s[i];
writeln(s1:6);
writeln(s2:6);
writeln(s3:6);
writeln(s4:6);
readln
end.
Viết chương trìnhlàm thay đổi chức năng phím CAPLOCK, khi tắt caplock ta gõ chữ cái thì xuất hiện chữ cái hoa, ngựơc lại khi bật đèn caplock ta gõ chữ cái thì xuất hiện chữ cái thường..
uses crt;
var hoa,thuong:string;
 ch,t,h:char;
Begin
clrscr;
for t:='a'to'z'do thuong:=thuong+t;
for h:='A'to'Z'do hoa:=hoa+h;
repeat
ch:=readkey;
if pos(ch,thuong)0 then ch:=upcase(ch)
 else if pos(ch,hoa)0 then ch:=chr(ord(ch)+32);
write(ch);
until ch=#13;
end.
Viết chương trìnhnhập các kí tự từ bàn phím không cho hiện ký tự này lên mà chỉ hiện các dấu ‘*’ như kiểu mật khẩu. Hỏi có hiện mật khẩu không nếu có thì xuất mật khẩu vừa nhập ra.
uses crt;
var s:string;
 ch,tl:char;
Begin
clrscr;
write('Nhap mat khau:');
repeat
ch:=readkey;
write('*');
s:=s+ch;
until ch=#13;
writeln;
write('Co hien mat khau khong(c/k):');readln(tl);
if upcase(tl)='C' then write(' Mat khau la:',s);
readln
end.
Viết chương trìnhđổi một số <4000 ra số La Mã ( L :50; C:100; D:500; M:1000 - vd:2364 à MMCCDLXIV)
var a,x,y,w,z:integer;
 n: array [0..3] of string;
 t: array [0..9] of string;
 c: array [0..9] of string;
 d: array [0..9] of string;
begin
n[1]:='C';n[2]:='CC';n[3]:='CCC';
t[1]:='M';t[2]:='MM';t[3]:='MMM';t[4]:='MD';
 t[5]:='D';t[6]:='DM';t[7]:='DMM';t[8]:='DMMM';t[9]:='MC';
c[1]:='X';c[2]:='XX';c[3]:='XXX';c[4]:='XL';
 c[5]:='L';c[6]:='LX';c[7]:='LXX';c[8]:='LXXX';c[1]:='XM';
d[1]:='I';d[2]:='II';d[3]:='III';d[4]:='IV';
 d[5]:='V';d[6]:='VI';d[7]:='VII';d[8]:='VIII';d[1]:='IX';
{I$-}
repeat
write('moi nhap so: ');
readln(a);
until (a<4000) and (IOResult=0);
{I$+}
x:=a div 1000;
y:=a mod 1000 div 100;
w:=a mod 100 div 10;
z:=a mod 10;
write(n[x],t[y],c[w],d[z]);
readln
end.
Viết chương trình điều chỉnh một số nguyên bị nhập sai từ bàn phím. Sau đó sẽ cho biết số nhập sai và số đã sửa nếu người sử dụng yêu cầu.
	Ví dụ: số nhập sai là: 23hdj43jj, chương trình sẽ sửa lại là:2343
var s,s1:string;
 i,j:integer;
 so:set of char;
 tloi:char;
begin
readln(s);
so:=['0'..'9'];
for i :=1 to length(s) do if s[i]in so then s1:=s1+s[i];
write('Co hien so khong (c/k)');readln(tloi);
if upcase(tloi)'C' then write('Tam biet')
 else if length(s1)<length(s)then write('Ban nhap so sai: ',s,' sua lai la: ',s1)
 else write('Ban nhap so chinh xac:',s);readln;
end.
Nhập một xâu s bao gồm số và kí tự, in ra xâu đã sắp xếp số theo thứ tự tăng dần còn vị trí các kí tự vẫn giữ nguyên?
	Ví dụ: nhập: abc6ghj7kkkkk1hhhh9
	Kết quả: abc1ghj6kkkkk7hhhh9
var a:array[1..100]of integer;
 s,s1,s2:string;
 i,X,c,tam,j,n:integer;
 so : SET OF integer;
Begin
so:=['0'..'9'];
readln(s);
for i:=1 to length(s) do
 if (s[i] in so) then
 begin
 val(s[i],x,c);
 j:=j+1;
 a[j]:=x
 end;
for i:=1 to j-1 do
 for n:=i+1 to j do
 if a[i]>a[n] then
 begin
 tam:=a[i];
 a[i]:=a[n];
 a[n]:=tam;
 end;
for i:=1 to j do
 begin
 str(a[i],s1);
 s2:=s2+s1;
 end;
n:=0;s1:='';
for i:=1 to length(s) do if s[i] in so then
 begin
 inc(n);
 delete(s,i,1);
 insert(s2[n],s,i);
 end;
write(s);
readln
end.
Viết chương trìnhcho nhập một xâu ký tự trong đó có lẫn vào một số có 3 chữ số (vd: fffhgj234fgg)- có kiểm tra việc nhập sai (vd: jghjg45jk hoặc ggdg012gdg hoặc ggdgg34hjhh3) và cho phép nhập lại. Kiểm tra cho biết số đó có phải là số nguyên tố không?
var s,s1:string;
 x,vt,c,dem,i:integer;
function ktranto(a:integer):boolean;
begin
ktranto:=true;
for i:=2 to a-1 do
 if a mod i=0 then ktranto:=false;
end;
begin
repeat
dem:=0;
write('moi nhap xau: ');
readln(s);
for i:=1 to length(s) do
 if s[i] in ['0'..'9'] then
 begin
 dem:=dem+1;
 if dem=1 then vt:=i;
 s1:=copy(s,vt,3);
 val(s1,x,c);
 end;
until (c=0) and (x>99) and (dem=3);
if ktranto(x) then write('day la so nguyen to :',x);
readln
end.
viết chương trình kiểm tra việc nhập một ký tự và một xâu ký tự bằng kí tự in hoa( nếu không đúng thì nhập lại) sau đó cho biết số lần ký tự xuất hiện trong xâu ký tự?
uses crt;
var i,dem:integer;
 ch:char;
 s:string;
begin
clrscr;
repeat
write('moi nhap ki tu: ');
readln(ch);
until ch in ['A'..'Z'];
repeat
write('moi nhap xau ki tu: ');
readln(s);
dem:=0;
for i:=1 to length(s) do
 if s[i] in ['A'..'Z'] then inc(dem);
until dem=length(s);
dem:=0;
for i:=1 to length(s) do
 if ch=s[I] then inc(dem);
write(ch,' xuat hien ',dem, ' trong ', s);
readln
end.
Viết chương trìnhnhập vào một 2 xâu S và s1 in ra các lý tự chung của hai xâu? 
var s,s1,s2:string;
 i:integer;
begin
write('moi nhap sau thu nhat: ');
readln(s);
write('moi nhap sau thu hai: ');
readln(s1);
i:=1;
repeat
s2:=copy(s,i+1,length(s));
if pos(s[i],s2)0 then delete(s,i,1)
 else inc(i);
until pos(s[i],s2)=0;
for i:=1 to length(s) do
 if pos(s[i],s1)0 then
 writeln('ki ',s[i],' xuat hien trong ca hai sau');
readln
end.
Viết chương trìnhvẽ các hình: 
Chữ nhật đặc.
Chữ nhật rỗng.
Tam giác cân đặc.
Tam giác cân rỗng.
Tam giác vuông đặc.
Tam giác vuông rỗng.
 (Hình chữ nhật: nhập chiều dài và chiều rộng, Tam giác: nhập chiều cao; vẽ các hình trên với ký tự nhập từ bàn phím; có thể làm thành 6 bài riêng biệt hoặc làm chung một chương trình có lựa chọn )
uses crt; {BAI TOAN VE CAC LOAI HINH VOI KICH THUOC VA KI TU NHAP TU BAN PHIM}
var c,h,n,d,r,luachon:integer; ch:char;
begin
clrscr;
writeln(' Ve hinh chu nhat dac, nhap:1');
writeln(' Ve hinh chu nhat rong, nhap:2');
writeln(' Ve tam giac can dac, nhap:3');
writeln(' Ve tam giac can rong, nhap:4');
writeln(' Ve tam giac vuong dac, nhap:5');
writeln(' Ve tam giac vuong rong, nhap:6');
writeln;
repeat
Write('Moi nhap so:');
readln(luachon);
until (0<luachon)and(luachon<7);
write('Nhap ky tu de ve hinh:');readln(ch);
case luachon of
1: BEGIN
write('nhap chieu dai hinh chu nhat dac:');readln(d);
write('nhap chieu rong hinh chu nhat dac:');readln(r);
clrscr;
for c:=1 to d do
 begin
 for h:=1 to r do write(ch);
 writeln;
 end; END;
2: BEGIN
write('nhap chieu dai hinh chu nhat rong:');readln(d);
write('nhap chieu rong hinh chu nhat rong:');readln(r);
clrscr;
for c:=1 to d do
 begin
 for h:=1 to r do
 if (c=1)or(h=1)or(c=d)or(h=r) then write(ch) else write(' ');
 writeln;
 end; END;
3: BEGIN
write('Nhap chieu cao tam giac can dac:');readln(n);
clrscr;
for c:=1 to n do
 begin
 for h:=n-c+1 to n+c-1 do begin gotoxy(h,c);write(ch);end;
 writeln;
 end; END;
4:BEGIN
write('Nhap chieu cao tam giac can rong:');readln(n);
clrscr;
for h:=1 to n do
 begin
 for c:=1 to 2*n-1 do
 if (c=n-h+1) or (c=n+h-1)or(h=n) then write(ch) else write(' ');
 writeln;
 end; END;
5:BEGIN
write('Nhap chieu cao tam giac vuong dac:');readln(n);
clrscr;
for h:=1 to n do
 begin
 for c:=1 to h do write(ch);
 writeln;
 end; END;
6:BEGIN
write('Nhap chieu cao tam giac vuong rong:');readln(n);
clrscr;
for h:=1 to n do
 begin
 for c:=1 to h do
 if (c=1)or(h=n)or(c=h)then write(ch) else write(' ');
 writeln;
 end; END;
END;{KET THUC LENH CASE} 
readln; end.
(Tìm cách giải khác cho các bài tập trên)
Bà

File đính kèm:

  • docON HSG.doc