Bài tập pascal thi học sinh giỏi thpt năm 2024

Em hãy dùng ngôn ngữ lập trình Pascal viết chương trình để giải các bài toán sau, mỗi bài viết một chương trình và lưu vào D:\HSG2017\Tên_bài.PAS

Bài 1. Nhập vào từ bàn phím số nguyên dương n. Xuất ra màn hình

  1. n có phải là số nguyên tố hay không
  2. Tất cả các ước của n
  3. Tổng các ước nguyên tố của n

Ví dụ Nhập n=10

  1. 10 không phải là số nguyên tố
  2. Các ước của 10 là: 1 2 5 10
  3. Tổng các ước nguyên tố của 10 là 7

Bài 2. Nhập số nguyên dương n. Xuất ra màn hình

  1. Số đảo ngược của n
  2. Tổng các chữ số của n
  3. N là số có mấy chữ số

Ví dụ Nhập n=246

  1. Số đảo ngược của 246 là 642
  2. Tổng các chữ số của 246 là 12
  3. 246 là số có 3 chữ số

Bài 3. Nhập số nguyên dương n, tạo mảng a gồm n phần tử có giá trị tăng dần lần lượt a[1]=1, a[2]=2,…,a[n]=n.

  1. Nhập giá trị cần xóa là x, xóa phần tử có giá trị x, xuất mảng sau khi xóa Nhập giá trị cần thêm là y, vị trí cần thêm là k, thêm y vào mảng tại vị trí k và xuất mảng sau khi thêm.

4 Viết chương trình nhập vào 2 số nguyên, kiểm tra xem chúng có phải là ước của nhau không Program bt4_1; Var a,b:integer; Begin write('nhap a,b:'); readln(a,b); if (a mod b) = 0 then writeln(b,' la uoc cua ',a) else writeln(b,' khong la uoc cua ',a); if (b mod a) = 0 then writeln(a,' la uoc cua ',b) else writeln(a,' khong la uoc cua ',b); readln; End. 4 Viết chương trình giải hệ phương trình:

  

  cx dy f

ax by e

Program bt4_2; Var a,b,c,d,e,f,dt,dx,dy,x,y:real; Begin write('nhap a,b,c,d,e,f:'); readln(a,b,c,d,e,f); dt:=ad-bc; dx:=bf-ed; dy:=af-ce; if dt<>0 then begin x:=dx/dt; y:=dy/dt; writeln('ptr co nghiem x,y',x:10:2,y:10:2); end; if dt=0 then if (dx=0) and (dy=0) then writeln('ptr vo so nghiem'); if (dx=0) and (dy<>0) then writeln('ptr vo nghiem'); readln; End. **_4 Viết chương trình nhập vào 3 số nguyên a, b, c. Kiểm tra xem 3 số đó có thỏa mãn:

  • Là 3 cạnh của 1 tam giác thường
  • Là 3 cạnh của 1 tam giác cân
  • Là 3 cạnh của 1 tam giác đều
  • Không là 3 cạnh của 1 tam giác_** Program bt4_3; Var a,b,c:integer; Begin

Trường THCS Phú Lâm

write('nhap a,b,c:'); readln(a,b,c); if (a>0) and (b>0) and (c>0) and (a+b>c) and (b+c>a) and (a+b>c) then if (a=b) and (b=c) then writeln('la tam giac deu') else if (a=b) or (b=c) or (a=c) then writeln('la tam giac can') else writeln('la tam giac thuong') else writeln('khong la 3 canh cua tam giac'); readln; End. **_4 Viết chương trình nhập vào họ tên, điểm văn, điểm tóan, điểm anh văn của 1 học sinh. Sau đó in ra màn hình: họ tên, điểm trung bình, xếp lọai của học sinh đó (trên 1 dòng). Cho biết:

  • Điểm trung bình: (điểm văn + điểm tóan + điểm anh văn) / 3
  • Xếp loại: Giỏi, nếu điểm trung bình >= 9. Khá, nếu 7 <= điểm trung bình < 9. Trung bình, nếu 5 <= điểm trung bình < 7. Yếu, nếu điểm trung bình < 5._** Program bt4_4; Var hoten:string[37]; dv,dt,dnn:byte; dtb:real; xl:string[15]; Begin write('nhap ho ten:'); readln(hoten); write('nhap diem toan, diem van, diem ngoai ngu:'); readln(dt,dv,dnn); dtb:=(dt+dv+dnn)/3; if dtb>=9 then xl:='Gioi'; if (dtb>=7) and (dtb<9) then xl:='Kha'; if (dtb>=5) and (dtb<7) then xl:='Trung binh'; if dtb<5 then xl:='Yeu'; writeln('Ho ten:',hoten:25,'Diem TB:',dtb:10:2,'Xep loai:',xl:20); readln; End. 4 Viết chương trình nhập vào tháng, năm rồi tính số ngày của tháng. Biết năm nhuần là năm chia hết cho 4 và nếu nó chia hết cho 100 thì cũng phải chia hết cho 400

Program bt4_5; Var ngay,thang,nam:integer; Begin write('nhap thang:'); readln(thang); write('nhap nam:'); readln(nam);

End. 5 Viết chương trình tính tổng S=-1+2-3+.......+(-1)n+n, với n là số nguyên dương được nhập từ bàn phím. Program bt5_3; Var s,i,n:integer; Begin write('nhap n:'); readln(n); s:=0; for i:=1 to n do if (i mod 2)=0 then s:=s+i else s:=s-i; writeln('tong s=',s); readln; End.

5 Viết chương trình tính tổng S= 1  2 ... n  1  n , với n là số nguyên dương được nhập từ

bàn phím. Program bt5_4; Var i,n:integer; s:real; Begin write('nhap n:'); readln(n); s:=0; for i:=1 to n do s:=sqrt((n-i+1)+s); writeln('ket qua s=',s:10:2); readln; End. 5 Viết chương trình tính tổng S=1 2 +2 2 +.........+n 2 , với n là số nguyên dương được nhập từ bàn phím Program bt5_5; Var s:real; i,n:integer; Begin write('nhap n:'); readln(n); s:=0; for i:=1 to n do s:=s+exp(2ln(i)); writeln('tong',n,'so nguyen duong binh phuong=',s:10:2); readln; End. 5 Viết chương trình tính tổng bình phương của n số lẻ dương đầu tiên. **{VD: n=4 thì tính (11)+(33)}* Program bt5_6;

Var s:real; i,n:integer; Begin write('nhap n:'); readln(n); s:=0; for i:=1 to n do if i mod 2 <> 0 then s:=s+exp(2ln(i)) else writeln('khong tinh'); writeln('tong s=',s:10:2); readln; End. 5 Viết chương trình tính tổng bình phương của n số lẻ dương đầu tiên. **{VD:n=3 thi tinh (11)+(33)+(55)}** var i,n,s:integer; begin write('nhap n='); readln(n); s:=1; for i:=2 to 2*n-1 do if i mod 2 = 0 then s:=s+sqr(i+1); writeln('s= ',s); readln end. 5 Viết chương trình nhập vào 1 số nguyên rồi đếm số các chữ số của số đó (VD: 1999 có 4 chữ số) Program bt5_11; Var n:longint; dem:byte; Begin write('nhap n:'); readln(n); dem:=0; write('so ',n,' co '); repeat n:=n div 10; dem:=dem+1; until n=0; writeln(dem,' chu so'); readln; End. 5 Viết chương trình nhập vào 1 số nguyên rồi in ra số đảo ngược của số đó. Program bt5_12; Var n:integer; Begin write('nhap n:');

else writeln(n,' khong phai la so hoan thien'); readln; End. 5 Viết chương trình tìm tất cả các số có 3 chữ số abc sao cho abc = a 3 +b 3 +c 3 Program bt5_17; Var a,b,c:longint; Begin for a:=1 to 9 do for b:=0 to 9 do for c:=0 to 9 do if 100a+10b+c=aaa+bbb+ccc then writeln(a,b,c); readln; End. 5 Viết chương trình tìm tất cả các số có 3 chữ số sao cho tổng tất cả các chữ số bằng tích của chúng. VD: a+b+c = abc Program bt5_18; Var a,b,c:longint; Begin for a:=1 to 9 do for b:=0 to 9 do for c:=0 to 9 do if a+b+c=abc then writeln(a,b,c); readln; End. 5 Có 3 loại tờ giấy bạc 500đ, 200đ, 100đ. Viết chương trình tìm tất cả các phương án để có được số tiền 1700đ từ 3 loại giấy bạc trên Program bt5_19; Var a,b,c:integer; Begin for a:=0 to 3 do for b:=0 to 8 do for c:=0 to 17 do if a500+b200+c*100=1700 then writeln('so to 500:',a,'; so to 200:',b,'; so to 100:',c); readln; End. 5 Viết chương trình giải bài toán đố sau: Trăm trâu trăm cỏ Trâu đứng ăn nằm Trâu nằm ăn ba Ba trâu già ăn một Hỏi có bao nhiêu trâu đứng, trâu nằm, trâu già? Program bt5_20; Var x,y,z:integer; Begin

for x:=0 to 20 do for y:=0 to 33-x do for z:=0 to 100-x-y do if x+y+z=100 then writeln('so trau dung:',x,'; so trau nam:',y,'; so trau gia:',z); readln; End. 6 Viết 1 hàm kiểm tra 1 số nguyên x có phải là số nguyên tố không? Ứng dụng hàm này hãy tìm: a. Số nguyên tố nhỏ nhất có 3 chữ số. program bt6_2a; var i:integer; function snt(n:integer):boolean; var i:integer; begin i:=2; while n mod i <> 0 do i:=i+1; if n=i then snt:=true else snt:=false; end; begin i:=100; while (not snt(i)) do i:=i+1; writeln('snt nho nhat co 3 chu so la:',i); readln; end. b. Số nguyên tố lớn nhất có 3 chữ số. program bt6_2b; var i:integer; function snt(n:integer):boolean; var i:integer; begin i:=2; while n mod i <> 0 do i:=i+1; if n=i then snt:=true else snt:=false; end; begin i:=999; while (not snt(i)) do i:=i-1; writeln('snt lon nhat co 3 chu so la:',i); readln; end. 6 Viết 1 hàm kiểm tra 1 số nguyên x có phải là số chính phương không? Ứng dụng hàm này hãy in ra màn hình các số chính phương nhỏ hơn 100 program bt6_3;

begin if maxa[i] then min:=a[i]; end; writeln('max = ',max); writeln('min = ',min); readln; End. 8 Viết chương trình nhập vào một dãy các số nguyên, và sắp xếp dãy theo thứ tự giảm dần, in kết quả ra màn hình. Program bt8_2; Var a: array[1.] of integer; i, j, n, t : integer; Begin write('Cho biet so phan tu cua day : '); readln(n); for i:=1 to n do begin write('a[',i,'] = '); readln(a[i]); end; for i:=1 to n-1 do for j:=1 to n-i do if a[j]x) and (i<=n) do i:=i+1; if i>n then writeln('khong co tri ',x,' trong day') else writeln('phan tu dau tien co tri = ',x,' la : a[',i,']'); readln; End.

8 Viết chương trình nhập vào một dãy các số nguyên, và nhập trị x, rồi đếm xem trong dãy có mặt bao nhiêu số x? Program bt8_5; Var a:array[1.] of integer; i, n, x, dem : integer; Begin write('Cho biet so phan tu cua day : '); readln(n); for i:=1 to n do begin write('a[',i,'] = '); readln(a[i]); end; write('Cho biet tri x can dem : '); readln(x); dem:=0; for i:=1 to n do if a[i]=x then dem:=dem+1; writeln('co ',dem,' phan tu ',x,' trong day'); readln; End. 8 Viết chương trình nhập vào một dãy các số nguyên, và đếm số các số dương, âm, bằng không của dãy. Program bt8_6; Var a:array[1.] of integer; i, n, demam, demduong, demkhong : integer; Begin write('Cho biet so phan tu cua day : '); readln(n); for i:=1 to n do begin write('a[',i,'] = '); readln(a[i]); end; demam:=0; demduong:=0; demkhong:=0; for i:=1 to n do

Bài 1. Viết CT in ra màn hình các số nguyên từ 1 đến 100 sao cho cứ 10 số thì xuống dòng Program bai1; var i:byte; Begin for i:=1 to 100 do begin write(i:3); if i mod 10=0 then writeln; end; Readln End. Bài 2. Viết CT in ra màn hình bảng cửu chương Program bai2; Uses crt; Var i,j:byte; Begin Clrscr; for i:=1 to 10 do for j:=2 to 10 do begin write(j:2,'',i:2,'=',iJ:2,' '); if j=10 then writeln; end; Readln End. Bài 3. Viết CT tìm lời giải cho các bài toán sau a. Trong giỏ vừa thỏ vừa gà, 100 cái cẳng, 43 cái đầu. Hỏi mấy gà, mấy thỏ? Program bai3; Uses crt; Var ga,tho:byte; Begin Clrscr; for ga:=1 to 43 do begin tho:=43 - ga; if 4tho+2ga=100 then writeln('so ga va tho la: ',ga,' ',tho); end; Readln End. bừa gà vừa chó bó lại cho tròn, 36 con , 100 chân chẵn. Hỏi nhiêu gà, nhiêu chó? Program bai3b; Var ga,cho:byte; Begin for ga:=1 to 36 do begin

cho:=36 - ga; if 4cho+2ga=100 then write('so ga va cho la: ',ga,' ',cho); end; Readln End. Bài 4. Viết chương trình nhập vào hai số nguyên dương và xét xem hai số đó có nguyên tố cùng nhau hay không? Program sntcungnhau; Uses crt; Var x,y: integer; Function UCLN(a,b: integer): integer ; Var r : integer ; begin while b<>0 do begin r := a mod b; a := b; b := r; end; UCLN := a; end; Begin clrscr; write('nhap vao so x:');readln(x); write('nhap vao so y:');readln(y); if ucln(x,y) = 1 then writeln(x,' va ', y, 'la 2 snt cung nhau') else writeln(x, 'va', y, 'ko la snt cung nhau'); Readln; End.

Bài 5. Viết chương trình tìm và in ra màn hình tất cả hoán vị của 12345 (Ví dụ: 12345 12354 12435...). Program hoanvi; Uses crt; Var a,b,c,d,e,dem,d1:integer; Begin clrscr; writeln('Ban doi ti nhe!'); dem:=0; d1:=0; for a:=1 to 5 do for b:=1 to 5 do for c:=1 to 5 do for d:=1 to 5 do for e:=1 to 5 do