Anh chỉ lập trình đếm xem từ 1 đếnncó bao nhiêu số chín nút

Giới thiệu bài toán đếm số lượng chữ số của số nguyên

Bài toán: Nhập vào một số nguyên dương n hãy đếm xem số nguyên dương n có bao nhiêu chữ số.

Ý tưởng:

  • Đầu tiên ta dùng vòng lặp whilenếu n > 10 thì tiếp tục lấy n = n /10.;
  • Với mỗi lần vòng while chạy thì ta tăng biến đếm lên một lần dem++;
  • Số lượng chữ số của số nguyên n bằng dem + 1
  • Ý tưởng tính trên là mình dựa trên công thức số lượng chữ số của một số nguyên n bằng logarit cơ số 10 cộng với một.

Code bài giải bằng C++

Sau khi chạy chương trình ta có kết quả sau:

Như mình nói ở trên số lượng chữ số của một số nguyên n bằng logarit cơ số 10 cộng với một. Vậy thì ta nên viết một hàm tính logarit cơ số 10 luôn .

Sau khi chạy chương trình trên ta cũng nhận kết quả tương tự

Bài viết của mình đến đây là kết thúc. Cám ơn các bạn đã theo dõi !

Pascal co ban

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 (187.34 KB, 46 trang )

(1)MỤC LỤC. BÀI TẬP LÀM QUEN..........................................................................................1 PHÉP TOÁN TRONG PASCAL..........................................................................4 CẤU TRÚC RẼ NHÁNH.....................................................................................8 VÒNG LẶP BIẾT TRƯỚC SỐ LẦN LẶP LẠI.................................................19 VÒNG LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC............................................23 KIỂU MẢNG......................................................................................................26 KIỂU XÂU (Chuỗi)............................................................................................31 KIỂU DỮ LIỆU TỆP (FILE/TẬP TIN)..............................................................34 CHƯƠNG TRÌNH CON.....................................................................................37 BÀI TẬP LÀM QUEN 1. Viết chương trình in ra màn hình câu: “Hello World” Begin Writeln(‘Hello World’); Readln; End. 2. In đoạn thơ sau ra màn hình(sử dụng lệnh Write): Thuở còn thơ ngày hai buổi đến trường Yêu quê hương qua từng trang sách nhỏ Ai bảo chăn trâu là khổ Tôi mơ màng nghe chim hót trên cao Gợi ý: Begin Write(‘Thuo con tho ngay hai buoi đen truong’); Write(‘Yêu quê hương qua ….’); … Readln; End. 3. In đoạn thơ sau ra màn hình(sử dụng lệnh Writeln): Thuở còn thơ ngày hai buổi đến trường Yêu quê hương qua từng trang sách nhỏ Ai bảo chăn trâu là khổ Tôi mơ màng nghe chim hót trên cao 4. Viết chương trình tính chu vi và diện tích hình chữ nhật, với chiều dài và chiều rộng là các số nguyên nhập từ bàn phím. VD: CDai=6, CRong=4  ChuVi=20, DienTich=24; CDai=10, CRong=5  ChuVi=30, DienTich=50; CDai=7, CRong=3  ChuVi=20, DienTich=21; Giải: Var d, r: integer; S, cv: integer; Begin Write(‘nhap chieu dai:’);.

(2) Readln(d); Write(‘nhap chieu rong:’); Readln(r); cv:=(d+r)*2; S:=d*r; Writeln(‘Chu vi la:’,cv); Writeln(‘Dien tich la:’,s); Readln; End. 5. Viết chương trình tính chu vi và diện tích hình tròn, với bán kính là số nguyên nhập từ bàn phím. VD: R=1  VD: R=1  Cvi=6.28, DTich=3.14; R=2  Cvi=12.56, DTich=12.56; R=5  Cvi=31.4, DTich=78.5; Giải: Var R:integer; Cv,S: real; Begin Write(‘Nhap ban kinh:); Readln(r); Cv:=r*2*3.14; S:=r*r*3.14; Writeln(‘Chu vi la:’,cv:10:3); Writeln(‘Dien tich la:’,S:8:5); Readln; End. 6. Viết chương trình tính chu vi và diện tích hình vuông, với cạnh hình vuông là số nguyên nhập từ bàn phím. Vd: Canh=2 CVi=8, DTich=4; Canh=5 CVi=20, DTich=25; Canh=3 CVi=12, DTich=9; 7. Viết chương trình tính tổng và tích 2 số nguyên a và b nhập từ bàn phím. Vd: a = -3, b = 1 S = -2, T = -3; a = 4, b = 2 S = 6, T = 8; a = 2, b = 5 S = 7, T = 10; Giải: Var a,b:integer; S,T: integer; Begin Write(‘Nhap so nguyen thu nhat:’); Readln(a); Write(‘Nhap so nguyen thu hai:’); Readln(b); S:=a+b; Writeln(‘Tong cua 2 so nguyen do la:’,s); Readln; End. 8. Viết chương trình tính tổng và tích 3 số nguyên a, b, c nhập từ bàn phím. Vd: a = -3, b = 1, c = 4 S = 2, T = -12; a = 4, b = 2, c = 1 S = 7, T = 8; a = 2, b = 4, c = 3 S = 9, T = 24;.

(3) 9. Viết chương trình tính trung bình cộng của 3 số nguyên a, b, c nhập từ bàn phím. Vd: a = -3, b = 1, c = 4 TB = 0.666; a = 4, b = 2, c = 1 TB = 2.333; a = 2, b = 4, c = 3 TB = 3; 10. Viết chương trình tính chu vi và diện tích một tam giác có 3 cạnh a, b, c nhập từ bàn phím (s=sqrt(p*(p-a)*(p-b)*(p-c)) với p=(a+b+c)/2). Vd: a = 3, b = 4, c = 5  CV = 12, s = 6; a = 2, b = 3, c = 4  CV = 9, s = 2.9; a = 3, b = 3, c = 3  CV = 9, s = 3.89; 11. Viết chương trình tính diện tích tam giác có chiều dài cạnh đáy và chiều cao tương ứng là các số nguyên nhập từ bàn phím.

(4) PHÉP TOÁN TRONG PASCAL + : cộng - : trừ * : nhân / : chia Mod: chia lấy dư Vd: 5 mod 3 =2 7 mod 3 =1 8 mod 2=0 Div: chia lấy phần nguyên Vd: 5 div 3= 1 7 div 3 = 2 8 div 2 =4 BT: 1. Chuyển các biểu thức sau sang biểu thức trong pascal: a) a2 +b-c  a*a+b-c b) (a-b)(c+d)  (a-b)*(c+d) 2 c) 2x -5x+2y  2*x*x-5*x+2*y d) 1+2xyz  1+2*x*y*z 2 3 + 5 2 1 f) -x(x+y) x 2 3 g) X2+2xy- 5 + 2. . x*x+2*x*y-2/5+3/2. h) 2x2+y3+1 . 2*x*x+y*y*y+1 . 1/(a+1)*(a-b)+1 . 2*x-1>=5. e). i). 1 (a −b)+1 a+1. j) 2x-1>5. . 2/5+3/2 . 1/x-x*(x+y). 1 1 1 k) 1+ 3 + 4 + 5 < 0  1+1/3+1/4+1/5<=0 1 l) S= 1+ 1  S=1/(1+1/2) 2 1 m) S= 1+ 1  S=1/(1+1/(x*x)) 2 x. 2. Chuyển các biểu thức pascal sau sang biểu thức toán học: a) 2*x*x*x+3*y-z  2x3+3y-z 1 1 1 - 1 x x2. b) 1/(1/x)-1/(1/(x*x)) . c) X+y+z >= a+b+c . x+y+z > a+b+c. d) X*x+2*x+1/2*x . x2+2x+ 2 x. e) 1/2*3/(2+sqrt(2))*8+7/4*2*2 . 1. 1 3 7 . .8  .22 2 2 2 4 1. 3. Viết chương trình tính: f(x)= 2x5 - 5x4+4x3+ 3 x-2, với x nhập từ bàn phím. Vd: X=1: f(1) = 2.(1)5-5.(1)4+4.(1)3+1/3.1-2=2-5+4+1/3-2=-0.667 X=-2: f(-2) = 2.(-2)5-5.(-2)4+4.(-2)3+1/3.(-2)-2=2.(-32)-5.16+4.(-8)+2/3-2 = -178.667.

(5) X=0  f(0) = -2 Giải: Var x,f:real; BEGIN Write(‘Nhap x:’); Readln(x); F:=2*x*x*x*x*x-5*x*x*x*x+4*x*x*x+1/3*x-2; Writeln(‘f=’,f:5:3); Readln; END. 1. 4. Viết chương trình tính: f(x)= 3x5 + 6x4-5x3+ 3 x-2, với x nhập từ bàn phím. Vd: X = 1f(1) = 2.333; X = 2f(2) = 150.667; X = -1f(-1) = 5.667 Giải: Var F, x,y,z: real; BEGIN Write(‘Nhap gia tri cua x:’); Readln(x); F:=3*x*x*x*x*x+6*x*x*x*x-5*x*x*x+1/3*x-2; Writeln(‘f(’,x:1:2,’)=’,F:10:3); Readln; END. x+y x −z − 5. Viết chương trình tính: f(x,y,z)= x − 1 xy , với x,y,z nhập từ bàn phím. Vd: 2. Gợi ý:. x = 1, y = 2, z =3  f(1,2,3)=7; x = 1, y = -1, z = 0  f(1,-1,0)=1; x = 2, y = 3, z =4  f(2,3,4)=3.667; F:=(x+y)/(x-1/2)-(x-z)/(x*y);. y z 6. Viết chương trình tính: f(x,y,z)= (1+ z) , với x,y,z nhập từ bàn phím. VD: 1 2− 1+ x 3 x+. Gợi ý:. x = 1, y = 2, z =3  f(1,2,3)=4.444; x = 1, y = -1, z = 2  f(1,-1,2)=1; x = 2, y = 3, z =4  f(2,3,4)=7.279; F:=(1+z)*(x+y/z)/(2-1/(1+x*x*x)).

(6) 1 x 2 3  1 x (1  x) 1 1 2 x 3 1 x 2 3 1 x 2 , với x nhập từ bàn phím. 7. Viết chương trình tính: f(x)= x. VD: X = 0f(0) = 1.333; X = 2f(2) = 3.706; X = -3f(-3) = 2.9 Gợi ý: F:=(1+x)*(x+1/3)/(2-1/(1+x*x*x))+(x/(1-x)+2)/(3+(x-1/2)/(x+1/2)) 8. Viết chương trình tính: G:=5a3 – 4a2b + 10(b2 + c)a - 50b - 20c; Với a=3, b=4, c=5 Gợi ý: const a=3; b=4; c=5; Var G:integer; Begin G:=…. Writeln(‘g=’,g); Readln; End. 9. Viết chương trình tính: f(x) =. Giải:. Vd: x = 1  f(1) = 1.477 x = 2  f(2) = 1.142 x = 5  f(5) = 0.875. √. 2 3 1+ + −0 . 7 , với x nhập từ bàn phím x 5+ √ 2+ x. Var x,F:real; BEGIN Write(‘nhap gia tri cua x:’); Readln(x); F:=Sqrt(1+2/x)+3/(5+sqrt(2+x))-0.7; Writeln(‘F=’,F:10:8); Readln; END. 10. Viết chương trình tính:. 3 1 1 x +1 +¿ + −0 . 7 , với x nhập từ bàn phím 2 2+3 x 5+ √ 2+ x √¿. Vd: x = 1  f(1) = 0.677 x = 2  f(2) = 0.503 x = 5  f(5) = 0.315. √.

(7) 11. Chuyển các biểu thức toán học sau sang biểu thức Pascal a 1 1   a3  2 b a). b a  b a 1 (a+b) 2   2 5 2 ( a  b) a b).. 1 5 4 3 4    3 2 3 3 a a  b a2 c)..  a/b+1/(a+b)+a*a*a+1/(b*b)  (a+b)*(a+b)-a/((a+b)*(a+b))-1/(a*a)+5.  4+1/3-5/3/a+4/3/(a+b)-3/2/(a*a) 12. Chuyển các biểu thức Pascal sau sang biểu thức toán học a.. 1+1/2+1/2*3+1/3*4+1/4*5. b.. 1/a + 2/a*b + 3/a+b. c.. 1/(a*b)+2/a+a+3/(a*a+1)*b. 1 1 1 1 1   .3  .4  .5 3 4  2 2 1 2 3  .b   b a  a a 1 2 3   a  2 .b a 1  a.b a. 13. Viết chương trình tính bán kính đường tròn ngọai tiếp tam giác có ba cạnh a,b,c nhập abc. vào từ bàn phím (công thức R= 4 S , với S là diện tích tam giác). Vd: a=3 b=4 c=5 r=2.5 14. Viết chương trình nhập vào điểm Toán, văn, Anh văn của 1 học sinh. Tính trung bình của học sinh đó, biết rằng Toán, Văn là hệ số 2. Vd: Toan=7, Van=6, AV=8 thì TB=(Toan*2+Van*2+AV)/5= 6.8 15. Viết chương trình nhập vào số học sinh của 1 lớp và số táo trong rổ. Hãy chia đều số táo cho tất cả học sinh trong lớp, mỗi bạn sẽ được bao nhiêu quả táo? Còn dư lại bao nhiêu quả? Vd: sohocsinh=11, tongsotao=28 thì sotaomoiban=28 div 11 =2, sotaodu=28 mod 11=6 16. Viết chương trình nhập vào số giây, in ra giờ:phút:giây. Vd: 4010 giây Gio=4010 div 3600=1 Phut=(4010 mod 3600) div 60 =6 Giay=(4010 mod 3600) mod 60=50 Kết quả: 1:6:50 Gợi ý: h:= t div 3600; m:= (t mod 3600) div 60; s:=(t mod 3600) mod 60; 8. Viết chương trình nhập vào một số nguyên có 3 chữ số. In ra màn hình 2 chữ số cuối của số vừa nhập. Vd: nhập 351 thì in ra 51.

(8) CẤU TRÚC RẼ NHÁNH * Dạng thiếu: If <Điều kiện> Then <Câu Lệnh>; Nếu Điều Kiện đúng thì Câu Lệnh được thực hiện * Dạng đủ: If <Điều kiện> Then <Câu Lệnh 1 > Else <Câu Lệnh 2 >; Nếu Điều Kiện đúng thì Câu Lệnh 1 được thực hiện, ngược lại thì Câu Lệnh 2 được thực hiện (Chú ý: Trước ELSE không có dấu “;”) * Case <Biểu thức> of <Giá trị 1, 2, …>: Xử lý; <Giá trị a, b, …>: Xử lý; <Giá trị I, II, …>: Xử lý; Else Xử lý; End; Vd: Viết chương trình kiểm tra 1 số nguyên n nhập từ bàn phím là số chẵn hay lẽ. vd: n=4  so chan; n=7  so le Giải: Var n : Integer; BEGIN Write(‘Nhap so nguyen n:’); Readln(n); If n mod 2 =0 then Writeln(n,‘ la so chan’) Else Writeln(n,‘ la so le’); Readln; END. BT: 1. Viết chương trình kiểm tra 1 số nguyên n nhập từ bàn phím có chia hết cho 5 hay không? Vd: n=22  khong chia het cho 5; n=30  chia het cho 5 2. Viết chương trình nhập vào 2 số nguyên a va b, in ra màn hình số lớn hơn (trả lời “bằng nhau” nếu chúng bằng nhau). Vd: a=3 b=4 4; a=5 b=-6 5; a= 8 b=8  Bang nhau; Giải * Cách 1: Var a,b: integer; BEGIN Writeln(‘Nhap so nguyen thu nhat:’); Readln(a); Writeln(‘Nhap so nguyen thu hai:’); Readln(b); If a>b then writeln(a);.

(9) If b>a then writeln(b); If a=b then writeln(‘Bang nhau’); Readln; END. * Cách 2: Var a,b: integer; BEGIN Writeln(‘Nhap so nguyen thu nhat:’); Readln(a); Writeln(‘Nhap so nguyen thu hai:’); Readln(b); If a>b then writeln(a) Else If b>a then writeln(b) else writeln(‘Bang nhau’); Readln; END. 3. Viết chương trình nhập vào 3 số nguyên a, b, c; in ra màn hình số lớn nhất. vd: a=1 b=2 c=3  Max=3; a=4 b=2 c=3  Max=4; a=2 b=2 c=1  Max=2; a=2 b=2 c=2  3 so bang nhau; Giải: Var a, b,c: integer; Max:Integer; BEGIN Write(‘Nhap vao 3 so nguyen:’); Readln(a,b,c); Max:=a; If b>Max then Max:=b; If c>Max then Max:=c; If (a=b) and (b=c) then writeln(‘3 so bang nhau’) Else Writeln(‘So lon nhat la:’,Max); Readln; END. 4. Viết chương trình nhập vào tuổi của 1 người, in ra màn hình: Thiếu nhi nếu tuổi<=11 Thiếu niên nếu 11< tuổi <=25 Trung niên nếu 25< tuổi <=50 Lão niên nếu tuổi >50 Vd: tuoi=12  thieu nien; tuoi=6 thieu nhi; tuoi=30  trung nien. Giải: Var Tuoi:integer; BEGIN Write(‘Nhap tuoi:’);.

(10) Readln(tuoi); If tuoi<=11 then writeln(‘Thieu nhi’) else If tuoi<=25 then writeln(‘Thieu nien’) else If tuoi<=50 then writeln(‘Trung nien’) else writeln(‘Lao nien’); Readln; END. 5. Viết chương trình kiểm tra xem 3 số a, b, c nhập từ bàn phím có là 3 cạnh của một tam giác hay ko? Nếu phải thì tính chu vi và diện tích của tam giác đó, ngược lại thông báo 3 số đó ko phải là 3 cạnh của tam giác Giải: Var a,b,c,CV,S,p:real; BEGIN Write(‘nhap 3 so a,b,c:’); Readln(a,b,c); If (a+b>c) and (a+c>b) and (b+c>a) and (a>0) and (b>0) and (c>0) then Begin Writeln(‘Day la 3 canh cua tam giac’); CV:= a+b+c; P:=CV/2; S:=Sqrt(p*(p-a)*(p-b)*(p-c)); Writeln(‘Chu vi la:’,cv:5:2); Writeln(‘Dien tich la:’,s:6:3); End Else Writeln(‘Day Khong la 3 canh cua tam giac’); Readln; END. 6. Viết chương trình giải phương trình bậc nhất 1 ẩn số: ax + b = 0 Vd: 2x + 3=0 (a=2; b=3)X=-3/2 0x+0=0 (a=0, b=0)  nghiem dung voi moi x 0x-5=0 (a=0, b=-5) vô nghiệm Gợi ý: + a = 0:  b=0: nghiem dung voi moi x  b<>0: vo n + a <> 0: x = -b/a Giải: * Cách 1: Var a,b:real; BEGIN Write(‘Nhap he so a, b’);.

(11) Readln(a,b); If a= 0 then Begin If b=0 then writeln(‘nghiem dung voi moi x); If b<>0 writeln(‘vn’); End; If a <> 0 then writeln(‘Phuong trinh co nghiem la:x=’,-b/a); Readln; END. * Cách 2: Var a,b:real; BEGIN Write(‘Nhap he so a, b’); Readln(a,b); If a= 0 then If b=0 then writeln(‘nghiem dung voi moi x) Else writeln(‘vn’) Else writeln(‘Phuong trinh co nghiem la:x=’,-b/a); Readln; END. 7. Viết chương trình giải phương trình bậc hai 1 ẩn số : ax2+bx+c=0 (a khác 0) Vd: a=1, b=2, c=-3 x1=1, x2=-3; a=1, b=2, c=1 x1=x2=-1 a=1, b=2, c=3 vô nghiệm; Gợi ý: D := b*b-4*a*c * D > 0: x1 = (-b+sqrt(D))/(2*a); x2 = (-b-sqrt(D))/(2*a); * D = 0: x = -b/(2*a) * D < 0: vn Giải: Var a,b,c,d,x1,x2,x:real; Begin Write(‘Nhap a,b,c (a<>0)’); Readln(a,b,c); D:= b*b-4*a*c; If d>0 then Begin x1:=(-b+sqrt(d))/(2*a); x2= (-b-sqrt(d))/(2*a); writeln(‘PT co 2 nghiem x1=’,x1:8:3,’ x2=‘,x2:8:3); end; if d=0 then Begin x:= -b/(2*a); writeln(‘PT co nghiem kep x1=x2’,x:8:3); end;.

(12) if d<0 then writeln(‘ptvn’); readln; end. 8. Viết chương trình giải hệ phương trình bậc nhất 2 ẩn số: ¿ a 1 x+b1 y=c 1 a 2 x+b 2 y=c 2 ¿{ ¿. Vd:. ¿ ¿ x +2 y=−1 x=1 − x + y=− 2 (a1=1, b1=2,c1=-1; a2=-1, b2=1,c1=-2) y=− 1 ¿{ ¿{ ¿ ¿ ¿ ¿ x +2 y=2 x=0 − x + y=1 (a1=1, b1=2,c1=2; a2=-1, b2=1,c1=1) y=1 ¿{ ¿{ ¿ ¿ ¿ x +2 y=2 − x − 2 y=1 VN ¿{ ¿ ¿ x+2 y=2 − x − 2 y=−2 VSN ¿{ ¿. Gợi ý:. a1b1 a2b2 Tính D= ¿ rli =a1*b2-a2*b1 ¿ || ¿ c1b1 c2b2 Dx= ¿ rli =… ¿ || ¿ a1c1 a2c2 Dy= ¿ rli =… ¿ || ¿. + D<>0: Hệ có duy nhất nghiệm: x = Dx/D; y = Dy/D + D = 0: Dx = Dy = 0: VSN Dx<>0 hoặc Dy <>0: VN Giải: Var a1,b1,c1,a2,b2,c2,D,Dx,Dy:real; Begin.

(13) Write(‘Nhap a1,b1,c1:’); Readln(a1,b1,c1); Write(‘Nhap a2,b2,c2:’); Readln(a2,b2,c2); D:= a1*b2-a2*b1; Dx:=c1*b2-c2*b1; Dy:=a1*c2-a2*c1; If D<>0 then writeln(‘He co duy nhat nghiem:x=’,Dx/D:5:3,’ y=’,Dy/D:5:3); if D=0 then Begin if (dx=0) and (dy=0) then writeln(‘vo so nghiem’); if (dx<>0) or (dy<>0) then writeln(‘vo nghiem’); end; readln; end. 9. Viết chương trình giải bất phương trình bậc nhất 1 ẩn số: ax+b>0 Gợi ý: + a > 0: x > -b/a (vd: 2x+3>0 x>-3/2) + a < 0: x < -b/a (vd: -2x+3>0 x<3/2) + a = 0:  -b >= 0: VN (vd: 0x-3>0  0x>3 Vô nghiệm )  -b < 0: nghiem đúng voi moi x (vd: 0x+3>0  0x>-3  nghiem đúng voi moi x ) Giải: Var a,b:real; Begin Write(‘Nhap he so a,b:’); Readln(a,b); If a>0 then writeln(‘x>’,-b/a:5:3); If a<0 then writeln(‘x<’,-b/a:5:3); If a=0 then Begin If -b>=0 then writeln(‘VN’); If -b<0 then writeln(‘nghiem đúng voi moi x ); End; Readln; End. 10. Viết chương trình giải bất phương trình bậc nhất 1 ẩn số: ax + b>=0 Gợi ý: vd: ax>= -b: * 2x +3 >= 0 * -2x +3 >= 0 + a > 0: x >= -b/a 2x >= -3 -2x >= -3 + a < 0: x <= -b/a x >=-3/2 x <=-3/2 + a = 0: * 0x -3 >= 0 * 0x +3 >= 0  -b>0 : VN 0x >= 3 0x >= -3 VN nghiem dung voi moi x.

(14)  -b <= 0: nghiem dung voi moi x 11. Viết chương trình giải phương trình bậc hai 1 ẩn số : ax2+bx+c=0 Gợi ý: +a=0 +b=0 + c = 0: vsn + c<>0: vn + b <> 0: x = - c / b + a <> 0: D := b*b-4*a*c * D > 0: x1 = (-b+sqrt(D))/(2*a); x2 = (-b-sqrt(D))/(2*a); * D = 0: x = -b/(2*a) * D < 0: vn Giải: Var a,b,c,x,x1,x2,D:real; BEGIN Writeln(' nhap a,b,c:'); Readln(a,b,c); If a=0 then Begin If (b=0) then Begin If (c=0) then Writeln('vo so nghiem'); If (c<>0) then Writeln('vo nghiem'); End; If (b<>0) then Writeln('nghiem cua phuong trinh la:', -c/b:1:2) End; If a<>0 then Begin D:=(b*b-4*a*c); If (D>0) then Begin x1:=(-b+sqrt(D))/(2*a); x2:=(-b-sqrt(D))/(2*a); Writeln('Phuong trinh co 2 nghiem la:x1=',x1,' x2=',x2); End; If (D=0) then Begin x:=(-b/(2*a)); Writeln('PT co nghiem kep la:',x); End;.

(15) If (D<0) then Writeln('PT vo nghiem '); end; Readln; END. 12. Viết chương trình nhập vào điểm trung bình học kỳ I và trung bình học kỳ II, tính trung bình cả năm theo công thức: TBCN=(TBHKI+TBHKII*2)/3. Xếp lọai theo cách: Giỏi nếu TBCN>=8 Khá nếu 6.5<=TBCN <8 If (tbcn>=6.5) and (tbcn<8) then Trung bình nếu 5.0<=TBCN <6.5 Yếu nếu 3.5<=TBCN <5 Kém nếu TBCN<3.5 Vd: TBKHI=7 TBHKII=8  TBCN=(7+8*2)/3=7.6 Xếp loại: Khá Giải: Var HKI,HKII,CN: Real; BEGIN Write(‘Nhap trung binh HKI, HKII’); Readln(HKI,HKII); CN:=(HKI+HKII*2)/3; Writeln(‘TBCN=’,CN:5:1); If CN>=8 then writeln(‘Gioi’); If (6.5<=CN) And (CN <8 ) then writeln(‘Kha’); If (5<=CN) And (CN <6.5 ) then writeln(‘Trung binh’); If (3.5<=CN) And (CN <5 ) then writeln(‘Yeu’); If CN <3.5 then writeln(‘Kem’); Readln; END. 13. Viết chương trình nhập vào 1 số tự nhiên N<=10.000, hãy cho biết số đó có mấy chữ số. vd: 15 có 2 chữ số; 2345 có 4 chữ số. Giải: Var n: integer; BEGIN Write(‘Nhap so n’); Readln(n); If (n>=0) And (n<=9 ) then writeln(‘so co 1 chu so’); If (n>=10) And (n<=99) then writeln(‘so co 2 chu so’); If (n>=100) And (n<=999 ) then writeln(‘so co 3 chu so’); If (n>=1000) And (n<=9999 ) then writeln(‘so co 4 chu so’); If (n=10000) then writeln(‘so co 5 chu so’); Readln; END..

(16) 14. Nhập một tháng, cho biết tháng đó thuộc mùa nào (Xuân, Hạ, Thu, Ðông), biết rằng tháng 2, 3, 4 là mùa Xuân, tháng 5, 6, 7: mùa Hạ, tháng 8, 9, 10: mùa Thu, và tháng 11, 12, 1: mùa Ðông. Vd: Thang = 3  thuộc mùa Xuân; Thang = 11  thuộc mùa Đông Giải: Var thang:integer; BEGIN Write(‘Nhap thang:’); Readln(thang); If (thang>=2) and (thang<=4) then writeln(‘Mua Xuan’); If (thang>=5) and (thang<=7) then writeln(‘Mua Ha’); If (thang>=8) and (thang<=10) then writeln(‘Mua Thu’); If ((thang>=11) and (thang<=12)) or (thang=1) then writeln(‘Mua Dong’); Readln; END. * Sử dụng Case …of: Var thang:integer; BEGIN Write(‘Nhap thang:’); Readln(thang); case thang of 2,3,4 : writeln(' Mua Xuan '); 5,6,7 : writeln(' Mua Ha'); 8,9,10 : writeln(' Mua Thu'); 11,12,1 : writeln(' Mua Dong'); Else writeln(' Khong biet!');. End; Readln; END. 15. Viết chương trình nhập vào 1 tháng của năm 2012, cho biết tháng đó có bao nhiêu ngày Vd: Tháng 3  31 ngày Tháng 6  30 ngày Tháng 2  29 ngày Giải: var sn,t:integer; Begin write('Nhap vao thang: '); readln(t); if (t=1) or (t=3) or (t=5) or (t=7) or (t=8) or (t=10) or (t=12) then sn:=31; if (t=4) or (t=6) or (t=9) or (t=11) then sn:=30; if t=2 then sn:=29; writeln('Thang ',t, ‘co ',sn,' ngay'); readln; End..

(17) * Sử dụng Case …of: var sn,t:integer; Begin write('Nhap vao thang: '); readln(t); Case t of 1,3,5,7,8,10,12: sn:=31; 4,6,9,11:sn:=30; 2: sn:=29; End; writeln('Thang ',t, ‘co ',sn,' ngay'); readln; End. 16. Viết chương trình nhập 1 số nguyên từ 1 đến 10. In ra chữ tiếng Anh của số đó. vd: nhập 3 thì in ra màn hình “Three” nhập 8 thì in ra màn hình “Eight” Gợi ý: if n=1 then writeln(‘one’) else if n=2 then writeln(‘two’) ….. If (n<1) or (n>10) then writeln(‘ko biet!’); * Viết lại bằng cách sử dụng Case …of: 17. Nhập vào số xe (có bốn chữ số) trong biển số xe máy của bạn. Cho biết số xe của bạn được mấy nút. Bạn là người may mắn nếu số nút=9. Bạn có may mắn không ? Ví du: số xe là 4546, tổng các chữ số là 4+ 5 + 4 + 6 = 19. 19 mod 10 =9. Số nút là 9, may mắn. Gợi ý: Tong :=0; Tong:= tong + SoXe mod 10; SoXe:= SoXe div 10; Tong:= tong + SoXe mod 10; SoXe:= SoXe div 10; Tong:= tong + SoXe mod 10; SoXe:= SoXe div 10; Tong:= tong + SoXe mod 10; 18. Nhập một số tiền N (N<=500) đồng, đổi ra xem được bao nhiêu tờ 5 đồng, bao nhiêu tờ 2 đồng, bao nhiêu tờ 1 đồng sao cho tổng số tờ là ít nhất. Ví dụ N= 43 đ = 8 tờ 5 đ + 1 tờ 2 đ + 1 tờ 1 đ. Cách tính như sau : Số tờ 5 đ = 43 div 5 = 8 Số tiền dư = 43 mod 5 = 3.

(18) Số tờ 2 đ = Số tiền dư div 2 = 3 div 2 =1 Số tờ 1 đ = Số tiền dư mod 2 = 3 mod 2 = 1 Giải: Var N, st5, st2, st1, sodu : integer; Begin Write(‘ Nhap so tien : ’); Readln(N); st5 := N div 5; Sodu := N mod 5; st2 := Sodu div 2; st1 := Sodu mod 2; Writeln(‘ KET QUA DOI TIEN LA: ’ ) ; Writeln(‘ So to 5đ= ‘, st5); Writeln(‘ So to 2đ= ‘, st2); Writeln(‘ So to 1đ=‘, st1); Readln; End. 19. Viết thuật toán tính tiền taxi căn cứ vào đoạn đường đi nhập từ bàn phím biết rằng (chú ý người nhập nhập số km>0)  Km đầu giá 12000đ  Km thứ 2 đến km thứ 30 giá 10000đ  Km thứ 31 trở đi tính 9000đ Vd: + km=3 thì Tien=1*12000+(3-1)*10000=12000+20000=32000 + km=40 thì Tien=12000+29*10000+(40-30)*9000=… Gợi ý: Nếu Km<=0 thì tiền:=0 Ngược lại nếu Km<=30 thì tiền:=12000+(km-1)*10000 Ngược lại thì tiền:=12000+29*10000+(km-30)*9000 Giải: Var km,t:longint; BEGIN Write(‘Nhap so km:’); Readln(km); If km<0 then t:=0 Else If km<30 then T:=12000+(km-1)*10000 Else T:=1200+29*10000+(km-30)*9000; Writeln(‘Tien phai tra:’,t); Readln; End. 20. Viết chương trình nhập vào số KW/h điện tiêu thụ trong 1 tháng và tính tiền điện sử dụng trong 1 tháng đó. Biết rằng, 50 KW/h đầu được tính với giá 600đ mỗi KW/h, 50 KW/h tiếp theo được tính với giá 800đ mỗi KW/h, 100 KW/h tiếp theo được tính với giá 1100đ mỗi KW/h, những KW/h tiếp theo được tính với giá 1500đ mỗi KW/h..

(19) Vd:. Số điện = 40 thì số tiền = 40*600 Số điện = 70 thì số tiền = 50*600 + (70-50)*800 Số điện = 110 thì số tiền = 50*600 + 50*800 + (110-50-50)*1100 Số điện = 230 thì số tiền = 50*600 + 50*800 + 100*1100 + (230-50-50100)*1500 Giải: Var d, t: longint; Begin Write(‘so KW/h da su dung’); Readln(d); If d<=50 then T:=d*600 Else If d<=100 then T:=50*600+(d-50)*800 Else If d<=200 then T:=50*600+50*800+(d-50-50)*1100 Else T:= 50*600+50*800+100*1100+(d-50-50-100)*1500; Writeln(‘So tien phai tra la:’,T); Readln; END..

(20) VÒNG LẶP BIẾT TRƯỚC SỐ LẦN LẶP LẠI For <biến đếm>:=<giá trị đầu> to <giá trị cuối> do <Câu lệnh>; Chú ý:  Vòng lặp được thực hiện khi giá trị đầu còn <= giá trị cuối. + Sau mỗi lần lặp, biến đếm tăng lên 1 đơn vị. + Vòng lặp sẽ dừng lại sau khi thực hiện câu lệnh nếu giá đầu = giá trị cuối.  Biến đếm, giá trị đầu, giá trị cuối là số nguyên. Vd1: Tính S = 3 + 4 + 5 + 6 + 7 + 8. Giải Var i: Integer; S: LongInt; BEGIN S:=0; For i:=3 to 8 do S:=S + i; Writeln(‘s=’,s); Readln; END. 1 1 1 1 1 + + Vd2: Tính S=1+ 2 3 + 4 5 +…+ 15 .. Var i: Integer; S: Real; BEGIN S:=0; For i:=1 to 15 do S:=S + 1/i; Writeln(‘s=’,s:10:3); Readln; END. BT: 1. Tính S = 1 + 2 + 3 + 4 + …+ n, với n nguyên dương nhập từ bàn phím. Vd: n=6  s = 21; n=10  s = 55 Var i,n:integer; S:longint; Begin Write(‘nhap n:’); Readln(n); S:=0; For i:=1 to n do s:= s + i; … 1 1. 1 1. 1. 2. Tính S=1+ 2 + 3 + 4 + 5 +…+ n , với n nguyên dương nhập từ bàn phím. Vd: n=6  s = 2.45; n=10  s = 2.92.

(21) 3. Tính S=1+3+5+7+…+2n-1, với n nguyên dương nhập từ bàn phím. Vd: n=3: 2*3-1=5 s=1+3+5 =9 n=7: 2*7-1=13 s=1+3+5+7+9+11+13 =49 1 1. 1. 4. Tính S= 4 + 6 +…+ 2 n , với n nguyên dương nhập từ bàn phím. Vd: n=2 s=0+1/4=0.25 n=5 s=1/4+1/6+1/8+1/10=0.64 n=8: 2*8=16 s=1/4+1/6+1/8+1/10+1/12+1/14+1/16 5. Tính S=1+4+7+…+3n-2, với n nguyên dương nhập từ bàn phím. Vd: n=3: 3*3-2=7: s=1+4+7=12 n=8: 3*8-2=22: s=1+4+7+10+13+16+19+22=92 6. Tính S=1+5+9+…+4n-3, với n nguyên dương nhập từ bàn phím. Vd: n=3: 4*3-3=10: s=1+5+9=15 n=8: 4*8-3=22: s=1+9+13+17+21+25+29+33=120 5. 6. n+2. 7. Tính S= 10 + 14 . . .+ 4 n −2 , với n nguyên dương nhập từ bàn phím. Vd: n=4: 4+2=6: s=5/10+6/14 n=8: 8+2=10: s=5/10+6/14+7/18+8/22+9/26+10/30 3 4. 5. n+ 2. 8. Tính S= 2 + 6 + 10 +.. .+ 4 n −2 , với n nguyên dương nhập từ bàn phím. Vd: n=3 (3+2)/(4*3-2)=5/10 s=3/2+4/6+5/10=2.6 9. Viết chương trình tính tổng S=50+49+48+…+16+15 10. Viết chương trình tính tổng S= -100-99-98-…-20 11. Viết chương trình nhập vào 1 số nguyên dương n. In ra màn hình những số chia hết cho 3 trong các số từ 1 đến n. Vd: n=13 thì in các số: 3 6 9 12 Gợi ý: For i:=1 to n do if i mod 3=0 then write(I:5); 12. Viết chương trình nhập vào 1 số nguyên dương n. In ra màn hình số lượng số chia hết cho 3 trong các số từ 1 đến n. Vd: n=13 thì có 4 số gồm: 3 6 9 12 Gợi ý: If i mod 3=0 then dem:=dem+1; 13. Viết chương trình nhập vào 1 số nguyên dương n. Cho biết từ 1 đến n có bao nhiêu số chia hết cho 5, là những số nào? Vd: n=31 thì có 6 số gồm: 5 10 15 20 25 30 14. Viết chương trình nhập vào 1 số nguyên dương n. Tính tổng những số chẵn từ 1 đến n. Vd: n=11 thì S=2+4+6+8+10. Gợi ý: If i mod 2=0 then s:=s+i; 15. Viết chương trình nhập vào 1 số nguyên dương n. Tính tổng những số chia hết cho 3 và 5 từ 1 đến n. Vd: n=50 thì S=15 + 30 + 45 16. Viết chương trình nhập vào 1 số nguyên dương n. Tính tổng những số chia hết cho 3 hoặc 5 từ 1 đến n. Vd: n=14 thì S=3 + 5 + 6 +10+ 9 +12 17. Viết chương trình nhập vào 1 số nguyên dương n. Cho biết n có phải là số nguyên tố hay không? Số nguyên tố là số chỉ chia hết cho 1 và chính nó Vd: n=7 là số nguyên tố vì 7 chỉ chia hết cho 1 và 7 n=8 Không là số nguyên tố vì 8 chia hết cho 1 và 8 nhưng còn chia hết cho 2 và 4 18. Tính T = 1.2.3.4… n, với n nguyên dương nhập từ bàn phím. 1 1 1. 1. 1 1 1. 1. 19. Tính T = 2 . 3 . 4 .. .. n , với n nguyên dương nhập từ bàn phím. 20. Tính T = 2 . 4 . 6 .. . 2 n , với n nguyên dương nhập từ bàn phím..

(22) 3 3 3. 3. 4 5 6. n+2. 21. Tính T = 1 . 3 . 5 . .. 2 n −1 , với n nguyên dương nhập từ bàn phím. 22. Tính T = 2 . 3 . 4 .. .. n , với n nguyên dương nhập từ bàn phím. 23. Viết chương trình nhập vào 2 số nguyên m và n (m<n). Tính tổng các số nguyên từ m đến n. vd: m=5, n=9 thì s=5+6+7+8+9=35 Gợi ý: S:=0; For i:= m to n do s := s+i; 24. Viết chương trình nhập vào 2 số nguyên m và n (m<n). Đếm xem trong các số nguyên từ m đến n, có bao nhiêu số chia hết cho 3. vd: m=5, n=9 thì có 2 số là 6 và 9 Gợi ý: Dem:=0; For i:=m to n do If I mod 3=0 then dem:=dem+1; 25. Viết chương trình nhập vào 2 số nguyên m và n (m<n). Đếm xem trong các số nguyên từ m đến n, có bao nhiêu số chia hết cho 3 hoặc chia hết cho 5. Tính tổng các số chẵn. vd: m=4, n=17 thì có 6 số là 6, 9, 12, 5, 10, 15 thỏa yêu cầu. Tổng chẵn = 4+6+8+10+12+14+16= Gợi ý: S:=0; Dem:=0; For i:=m to n do begin If (i mod 3=0) or (i mod 5=0) then dem:=dem+1; If i mod 2 = 0 then s:=s+i; End; 26. Vừa gà vừa chó Bó lại cho tròn 36 con 100 chân chẵn Hỏi có bao nhiêu gà, bao nhiêu chó? Giải: Var Ga:Integer; BEGIN For Ga:=1 to 35 do If Ga*2+(36-Ga)*4=100 then Writeln(‘Co ’, Ga,’ con ga , va ‘, 36-ga,’ con cho’); Readln; END. 27.. Trong giỏ vừa thỏ vừa gà, Một trăm cái cẳng bốn ba cái đầu. Hỏi có mấy gà mấy thỏ?. Giải: Var Ga:Integer;.

(23) BEGIN For Ga:=1 to 42 do If Ga*2+(43-Ga)*4=100 then Writeln(‘Co ’, Ga,’ con ga , va ‘, 36-ga,’ con tho’); Readln; END..

(24) VÒNG LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC While <điều kiện> do <Câu lệnh>;  Khi điều kiện đúng, câu lệnh được thực hiện  Khi chương trình bị lặp vô tận, nhấn Ctrl + Break để dừng chương trình Repeat <Câu lệnh>; Until <điều kiện>;  Khi điều kiện sai, câu lệnh được thực hiện  Khi chương trình bị lặp vô tận, nhấn Ctrl + Break để dừng chương trình Vd1: Ta có số tiền a (a>0), ta cần có số tiền b(a < b < 5a); với lãi suất ngân hàng là 1%/tháng, hãy tính xem sau bao nhiêu tháng gửi ngân hàng ta được số tiền b. Var a,b: Real; Thang: integer; BEGIN Repeat Write(‘Nhap so tien ban dau:’); Readln(a); Until a>0; Repeat Write(‘Nhap so tien can co:’); Readln(b); Until (b>a) and (b<5*a); Thang:=0; While a<b do Begin a:=a+a*1/100; Thang:=thang+1; End; Writeln(‘Sau ’, thang,’ thang ban se co so tien ‘,b:10:1); Readln; End. Vd2: Tính S=1+2+3+…+n; n nguyên dương nhập từ bàn phím. So sánh giữa for…do và while…do Var i,n: Integer; Var i,n: Integer; S: LongInt; S: LongInt; BEGIN BEGIN REPEAT REPEAT write('n='); write('n='); {$I-}{kiểm tra lỗi nhập vào không là {$I-}{kiểm tra lỗi nhập vào không là số} số} readln(n); readln(n); {$i+} {$i+} UNTIL (IOResult=0) and (n>0); UNTIL (IOResult=0) and (n>0); S:=0; S:=0; i:=1; For i:=1 to n do While i<=n do.

(25) S:=S + i;. Begin S:=S + i; i:=i+1; End; Writeln(‘s=’,s); Readln;. Writeln(‘s=’,s); Readln; END.. END. 1 1 1. 1. Vd3: Tính S= 1 + 2 + 3 +. . .+ n , với n nguyên dương nhập từ bàn phím. BT 1. Tìm UCLN của 2 số nguyên dương a,b. vd: UCLN(15,40)=5. UCLN(12,9)=3 Giải: Var a,b:Integer; BEGIN Write(‘Nhap so nguyen thu nhat:’); Readln(a); Write(‘Nhap so nguyen thu hai:’); Readln(b); While a<>b do Begin If a>b then a:=a-b Else b:=b-a; End; Writeln(‘UCLN=’,a); Readln; END. 2. Viết chương trình rút gọn phân số có tử và mẫu là 2 số nguyên dương nhập từ bàn phím. Vd: 5/15=1/3. 10/40=1/4 Giải: Var a,b:Integer; c,d:real; BEGIN Write(‘Nhap tu so:’); Readln(a); Write(‘Nhap mau so:’); Readln(b); C:=a; D:=b; While a<>b do Begin If a>b then a:=a-b Else b:=b-a;.

(26) End; C:=c/a; D:=d/a; Writeln(‘Phan so moi’,c:1:0,’/’,d:1:0); Readln; END. 4. Tính S = 1 + 4 + 7 + …+ 3n-2, với n nguyên dương nhập từ bàn phím. 5. Tính S = 10+15+20+25 …+ 5n, với n nguyên và n>=2 nhập từ bàn phím. 6. Tính S = -5-2+1+4+7+…+3n-2, với n nguyên và n>=-1 nhập từ bàn phím. 3 4. 5. n+ 2. 7. Tính S= 2 + 6 + 10 +.. .+ 4 n −2 , với n nguyên dương nhập từ bàn phím. 8. Nhập vào tuổi cha và con (tuổi cha >=25 và tuổi con < 2 lần tuổi cha). Tính xem sau bao nhiêu năm nữa thì tuổi cha gấp đôi tuổi con. Vd: cha=30, con =10  sau 10 năm thì tuổi cha gấp đôi tuổi con. Var i,cha,con: Integer; BEGIN Write(‘Nhap tuoi cha, con:’); Readln(cha,con); I:=0; While cha+i<>2*(con+i) do i:= i+1; Writeln(‘sau ‘,i,’ nam thi tuoi cha gap doi tuoi con’); Readln; END..

(27) KIỂU MẢNG Cách khai báo: C1: Var TenBien: Array[<chỉ số đầu>..< chỉ số cuối>] of kiểu dữ liệu; Vd1: * Var NhietDo: Array[1..100] of real; * Const Max=500 Var NhietDo: array[1..Max] of Real; C2: Type Mang = array[<chỉ số đầu>..< chỉ số cuối>] of kiểu dữ liệu; Var TenBien: Mang; Vd2: Type Mang= Array[1..100] of real; Var NhietDo: Mang; Vd3: Var a: array[1..100] of Integer; 1 2 3 4 5 Chỉ số 4 3 8 7 9 Giá trị a[1]=4 a[2]=3 a[3]=8 a[4]=7 a[5]=9 Nhập mảng Write(‘Nhap so phan tu:’); Readln(n); For i:=1 to n do Begin Write(‘a[’,i,’]=’); Readln(a[i]); End; Xuất mảng For i:=1 to n do Write(a[i]:4); Vd1: Viết chương trình nhập vào 5 số nguyên, đếm xem có bao nhiêu số dương trong 5 số đó. Giải: Var a: array[1..5] of integer; i,dem: integer; Begin For i:=1 to 5 do Begin Write(‘So thu ’,i,’:’); Readln(a[i]); End; For i:=1 to 5 do Write(a[i]:4); Dem:=0; For i:=1 to 5 do.

(28) If a[i]>0 then dem:=dem+1; Writeln(‘Co :’,dem,’ So duong’); Readln; END. Vd2: Viết chương trình nhập vào nhiệt độ của 7 ngày, In nhiệt độ của từng ngày; tính nhiệt độ trung bình của 7 ngày đó. Tìm xem có bao nhiêu ngày có nhiệt độ lớn hơn nhiệt độ trung bình. Giải: Var NhietDo: Array[1..7] of real; TB: Real; i,dem: integer; BEGIN For i:=1 to 7 do Begin Write(‘Nhap vao nhiet do ngay thu’,i,’:’); Readln(nhietdo[i]); End; For i:=1 to 7 do Writeln(‘Nhiet do ngay thu ’,i,’ la ‘,nhietdo[i]:5:1); For i:=1 to 7 do TB:=TB+nhietdo[i]; TB:=TB/7; Dem:=0; For i:=1 to 7 do If NhietDo[i]>TB Then Dem:=Dem+1; Writeln(‘Nhiet do trung binh la:’,TB:5:2); Writeln(‘Co ’,dem,’ ngay co nhiet do cao hon nhiet do trung binh’); Readln; END. BT: 1. Viết chương trình nhập vào 1 mảng số nguyên có n phần tử. Tính tổng các phần tử của mảng đó. Vd: 5 7 8 9 4 1  kết quả: 5+7+8+9+4+1=34 Giải: Var a: array[1..100] of integer; i,n,Tong:Integer; BEGIN Write(‘Nhap so phan tu:’); Readln(n); For i:=1 to n do Begin Write(‘a[’,i,’]=’); Readln(a[i]); End; For i:=1 to n do.

(29) Write(a[i]:4); Tong:=0; For i:=1 to n do Tong:=Tong+a[i]; Writeln(‘Tong=’,Tong); Readln; END. 2. Viết chương trình nhập vào 1 mảng số nguyên có n phần tử. Đếm xem trong mảng có bao nhiêu số dương 3. Viết chương trình nhập vào 1 mảng số nguyên có n phần tử. Đếm xem trong mảng có bao nhiêu số chẵn. vd: 2 3 1 4 5  có 2 số. 4. Viết chương trình nhập vào 1 mảng số nguyên có n phần tử. Đếm xem trong mảng có bao nhiêu số chia hết cho 3 và 5. vd: 15 3 10 45 5  có 2 số For i:=1 to n do If (a[i] mod 3 =0) and (a[i] mod 5=0) then dem:=dem+1; 5. Viết chương trình nhập vào 1 mảng số nguyên có n phần tử. Tính tổng các phần tử ở vị trí chẵn. vd: 2 3 1 4 5  s = 3+4=7 Gợi ý: For i:=1 to n do If i mod 2 =0 then tong:=tong+a[i]; 6. Viết chương trình nhập vào 1 mảng số nguyên có n phần tử. Tính tổng các phần tử có giá trị chẵn. vd: 2 3 1 4 5  s =2+4=6 7. Viết chương trình nhập vào 1 mảng số nguyên có n phần tử. Nhập vào 1 số nguyên x. Tìm xem trong mảng có giá trị x hay không? Nếu có thì nó ở vị trí nào? vd: 2 3 1 4 1; x=1 có ở vị trí 3; x= 8  không có. Gợi ý: Write(‘Nhap so nguyen x:’); Readln(x); For i:=1 to n do if a[i]=x then begin write(‘co o vi tri’,i); break; end; If (i=n) and (a[n] <>x) then writeln(‘khong co’); 8. Viết chương trình nhập vào 1 mảng số nguyên có n phần tử. Đếm xem trong dãy số có bao nhiêu số dương, bao nhiêu số âm? In ra dãy các số dương, dãy các số âm. vd: 2 3 -1 -4 0 1  có 3 số dương, có 2 số âm. Gợi ý: DemDuong:=0; DemAm:=0; For i:=1 to n do Begin if a[i]>0 then DemDuong:= DemDuong+1; if a[i]<0 then DemAm:= DemAm +1; end; writeln(‘co ’, DemDuong, ‘ so duong’); writeln(‘co ’, DemAm, ‘ so am); writeln(‘cac so duong la:’); for i:=1 to n do if a[i]>0 then write(a[i]);.

(30) 9. Viết chương trình nhập vào 1 mảng số nguyên có 15 phần tử. In ra màn hình những số chia hết cho 5 và tổng của chúng. Vd: 6 2 3 10 4 5 6 15  10 5 15, s = 30 Gợi ý: Tong:=0; For i:=1 to 15 do Begin If a[i] mod 5=0 then write(a[i]); If a[i] mod 5=0 then Tong:=Tong +a[i]; End; Writeln(‘Tong cac phan tu chia het cho 5 la:’,Tong); 10.Viết chương trình nhập vào 1 mảng số nguyên có n phần tử. Tìm phần tử lớn nhất đầu tiên trong mảng và vị trí của phần tử lớn nhất đó. Vd: 1 4 5 2 3 5 1 2  Max =5 ở vị trí 3. Giải: Var a: array[1..100] of integer; i,n,Max,vt:Integer; BEGIN Write(‘Nhap so phan tu:’); Readln(n); For i:=1 to n do Begin Write(‘a[’,i,’]=’); Readln(a[i]); End; For i:=1 to n do Write(a[i]:4); Max:=a[1]; Vt=1; For i:=2 to n do If a[i]>=Max then Begin max:=a[i]; vt:=i; end; Writeln(‘Max=’,Max,’ o vi tri ‘,vt); Readln; END. 11.Viết chương trình nhập vào 1 mảng số nguyên có n phần tử. Sắp xếp mảng theo thứ tự tăng dần. vd: 8 9 5 7 4 64 5 6 7 8 9 Gợi ý: For i:=1 to n-1 do For j:=i+1 to n do If a[i]>a[j] then Begin.

(31) Tam:=a[i]; a[i]:=a[j]; a[j]:=tam; End;.

(32) KIỂU XÂU (Chuỗi) Khai báo: Var <Tên biến>: String[độ dài lớn nhất của xâu]; * Độ dài lớn nhất của xâu <=255 Vd: HoTen: String[30]; DiaChi: String[200]; DienThoai: String[15]; LyLich: String; Một số thao tác trên chuỗi: s= ‘vinhkim com’ delete(s,3,2)  s= ‘vikim com’ delete(s,5,4) s= ‘vinhcom’ insert(‘ab’,s,3) s= ‘viabnhkim com’ insert(‘1’,s,5) s= ‘vinh2kim com’ copy(s,3,4) = ‘nhki’ pos(‘x’,s)=0 pos(‘i’,s)=2 pos(‘hk’,s)=4 length(s)=11 upcase(‘n’)= ‘N’ upcase(‘D’)= ‘D’ Vd: 1. Viết chương trình nhập vào họ và tên, in ra màn hình câu “Chào HoTen”, với HoTen là họ và tên người dùng vừa nhập vào. Giải: Var HoTen:String[40]; Begin Write(‘Nhap ho ten:’); Readln(HoTen); Writeln(‘Chao ’, HoTen); Readln; End. 2. Viết chương trình nhập vào 1 xâu, đưa ra màn hình xâu đó viết theo thứ tự ngược lại. S= ‘ab cdef’  fedc ba Giải: Var S:String; i:integer; BEGIN Write(‘Nhap 1 xau:’); Readln(S); For i:=length(s) downto 1 do Write(S[i]); Readln; END. 3. Viết chương trình nhập vào 1 xâu. In xâu đó với mỗi ký tự trên 1 dòng. S= ‘ab cdef’ .

(33) a b c d e f Giải: Var S:String; i:integer; BEGIN Write(‘Nhap 1 xau:’); Readln(S); For i:=1 to length(s) do Writeln(S[i]); Readln; END. 4. Viết chương trình nhập vào 1 xâu, đưa ra màn hình xâu đó sau khi đã loại bỏ các dấu cách. S= ‘truong thpt vinh kim’  s= ‘truongthptvinhkim’ Giải: Var S,S1:String; i:integer; BEGIN Write(‘Nhap 1 xau:’); Readln(S); S1:= ‘’; For i:=1 to length(s) do If s[i]<> ‘└┘’ then s1:=s1+s[i]; Writeln(s1); Readln; END. 5. Viết chương trình nhập vào 1 xâu, kiểm tra xem xâu đó có đối xứng hay không? Vd: madam, tenet, 1234321; nhưng 12334321 là không đối xứng Giải: Var S,S1:String; i:integer; BEGIN Write(‘Nhap 1 xau:’); Readln(S); S1:= ‘’; For i:=length(s) Downto 1 do s1:=s1+s[i];.

(34) If S=S1 then Writeln(‘Doi xung’) Else Writeln(‘Khong Doi xung’); Readln; END. 6. Viết chương trình nhập vào 1 xâu. Xoá các khoảng trắng thừa: a. Ở đầu câu Vd: s= ‘ vinh kim ’  s= ‘vinh kim ’ b. Ở cuối câu Vd: s=‘ vinh kim ’  s=‘ vinh kim’ c. Ở giữa câu Vd: s=‘ vinh kim ’  s=‘ vinh kim ’ Gợi ý: a. while s[1]= ‘└┘’ do delete(s,1,1); b. while s[length(s)]= ‘└┘’ do delete(s,length(s),1); c. while pos(‘└┘└┘’,s)>0 do delete(s, pos(‘└┘└┘’,s),1); 7. Viết chương trình nhập vào 1 xâu. Đếm xem trong xâu đó có bao nhiêu từ Vd: thế Giới vi tính  có 4 từ 8. Viết chương trình nhập vào 1 xâu. Đổi ký tự đầu từ thành chữ in hoa Vd: thế Giới vi tính  Thế Giới Vi Tính Gợi ý: For i:=2 to length(s)-1 do If s[i]= ‘ ’ then s[i+1]:=upcase(s[i+1]; Writeln(s); 9. Viết chương trình thay thế tất cả các từ “anh” trong một chuỗi thành từ “em”. Vd: s= ‘anh co biet la em ra ghet anh lam khong?’  s= ‘em co biet la em ra ghet em lam khong?’ Gợi ý: While pos(‘anh’,s)>0 do Begin Vt:= pos(‘anh’,s); Delete(s,vt,3); Insert(‘em’,s ,vt); End; 10.a/ Viết chương trình đổi tất cả ký tự trong 1 chuỗi thành ký tự in hoa Gợi ý: For i:=1 to length(s) do s[i]:=upcase(s[i]); b/ Viết chương trình đổi tất cả ký tự trong 1 chuỗi thành ký tự thường. Gợi ý: For i:=1 to length(s) do If (ord(s[i])>=65) and (ord(s[i])<=90) then s[i]:=chr(ord(s[i])+32);.

(35) KIỂU DỮ LIỆU TỆP (FILE/TẬP TIN) Khai báo: var <tên biến>:text; Vd: Var BaiTho:Text; BaiTap1:Text; Các thao tác: * Mở tệp mới để ghi: Assign(<biếntệp>, <têntệp>); Rewrite(<biếntệp>); * Mở tệp đã có để ghi thêm: Assign(<biếntệp>, <têntệp>); Append(<biếntệp>); * Mở tệp để đọc dữ liệu: Assign(<biếntệp>, <têntệp>); Reset(<biếntệp>); * Ghi dữ liệu vào tệp: Write(<biến tệp>, <các giá trị cần ghi vào tệp>); Hoặc Writeln(<biến tệp>, <các giá trị cần ghi vào tệp>); Cuối cùng, ta phải đóng tệp bằng thủ tục: Close(<biến tệp>); Vd1: Ghi dữ liệu vào tệp Var T1:Text; Begin Assign(T1,’c:\Dulieu.dat’); Rewrite(T1); Writeln(T1, ‘Tep van ban’); Write(T1,123); Write(T1, ‘ ’,123.45); Writeln(T1); Close(T1); End. * Đọc dữ liệu từ tệp văn bản: Read(<biến tệp>,<biến chứa dữ liệu đọc được>) ; Readln(<biến tệp>,<biến chứa dữ liệu đọc được>) ; Cuối cùng, ta phải đóng tệp bằng thủ tục: Close(<biến tệp>); Vd2: Đọc dữ liệu từ tệp Var T1:Text; s1: string; s2:integer;s3:real; Begin Assign(T1, ‘c:\Dulieu.dat’); Reset(T1); Readln(T1, s1); Read(T1); Read(T1, s2); Read(T1, s3); Close(T1);.

(36) Writeln(‘s1=’,s1); Writeln(‘s2=’,s2); Writeln(‘s3=’,s3); Readln; End. BT: 1. Viết chương trình nhập vào họ tên, lớp của 1 người, lưu họ tên và lớp đã nhập vào file dulieu.txt Var f:Text; HoTen[35],lop[10]:string; Begin Assign(f, ‘Dulieu.txt’); Rewrite(f); Write(‘Nhap ho ten:’);Readln(HoTen); Write(‘Nhap lop:’); Readln(lop); Writeln(f, Hoten); Writeln(f,Lop); Close(f); End. 2. Giả sử có file songuyen.txt có chứa 2 số nguyên a và b. Viết chương trình đọc 2 số nguyên đó rồi cộng lại, sau đó ghi kết quả vào cuối file songuyen.txt Var f:Text; a, b,s:integer; Begin Assign(f, ‘SoNguyen.txt’); Reset(f); Read(f,a,b); S:=a+b; Append(f); Writeln(f, s); Close(s); End..

(37) CHƯƠNG TRÌNH CON Có 2 loại: Thủ tục và hàm Vd: +Thủ tục: Readln(); Write(); Writeln();,… + Hàm: Sqrt();length();Upcase();… Cấu trúc: * Thủ tục: [Phần khai báo] Begin [dãy các lệnh] End; Procedure <TenThuTuc>[(danh sách các tham số)]; [Phần khai báo] Begin [dãy các lệnh] End; * Hàm: Function <TenHam>[(danh sách các tham số)]:<Kiểu dữ liệu>; [Phần khai báo] Begin [dãy các lệnh] TenHam:=<Biểu thức>; End; Vd1: Viết 1 thủ tục vẽ hình chữ nhật Program vd_KhongThuTuc; Begin Writeln(‘***********’); Writeln(‘* *’); Writeln(‘* *’); Writeln(‘***********’); Writeln; Writeln; Writeln(‘***********’); Writeln(‘* *’); Writeln(‘* *’); Writeln(‘***********’); Writeln; Writeln; Writeln(‘***********’); Writeln(‘* *’); Writeln(‘* *’); Writeln(‘***********’); Writeln; Writeln; Readln; End..

(38) Program vd_ThuTuc; Procedure Ve_HCN; Begin Writeln(‘***********’); Writeln(‘* *’); Writeln(‘* *’); Writeln(‘***********’); Writeln; Writeln; End; BEGIN Ve_HCN; Ve_HCN; Ve_HCN; Readln; END. Vd2: Viết 1 hàm tính tổng 2 số a,b Program vd_Ham; Function Tong(a,b:Real):Real; Var Kq:Real; Begin Kq:=a+b; Tong:=Kq; End; Var a,b,c,d,kq:Real; BEGIN Write(‘Nhap 2 so a,b:’); Readln(a,b); Kq:=tong(a,b); Writeln(‘Tong cua ’,a:1:1, ‘ va ’, b:1:1, ‘ la:’,kq :1:1); Write(‘Nhap 2 so c,d:’); Readln(c,d); Writeln(‘Tong cua ’,c:1:1, ‘ va ’, d:1:1, ‘ la:’,Tong(c,d) :1:1); Readln; END. * Các loại tham số: + Tham trị: Không thay đổi khi kết thúc chương trình con + Tham biến: Có thể thay đổi khi kết thúc chương trình con (có từ khóa Var trước khai báo) Vd1: Program vd1_ThamSo; Procedure ThamSo(a:Integer; Var b: Integer); Begin a:=a+1;6.

(39) b:=b+2;11 Writeln(‘a trong khi goi thu tuc: ’,a);6 Writeln(‘b trong khi goi thu tuc: ’,b);11 End; Var a,b:Integer; BEGIN a:=5; b:=9; Writeln(‘a truoc khi goi thu tuc: ’,a);5 Writeln(‘b truoc khi goi thu tuc: ’,b);9 ThamSo(a,b); Writeln(‘a sau khi goi thu tuc: ’,a);5 Writeln(‘b sau khi goi thu tuc: ’,b);11 Readln; END. Vd2: Đổi giá trị của 2 biến a và b: Program vd2_ThamSo; Procedure HoanVi(Var a:Integer; Var b: Integer); Var Tam:Integer; Begin Tam:=a; a:=b; b:=Tam; Writeln(‘a trong khi goi thu tuc: ’,a);9 Writeln(‘b trong khi goi thu tuc: ’,b);5 End; Var a,b:Integer; BEGIN a:=5; b:=9; Writeln(‘a truoc khi goi thu tuc: ’,a);5 Writeln(‘b truoc khi goi thu tuc: ’,b);9 HoanVi(a,b); Writeln(‘a sau khi goi thu tuc: ’,a);9 Writeln(‘b sau khi goi thu tuc: ’,b);5 Readln; END. BT: 1. Viết chương trình tính chu vi và diện tích của tam giác, với đoạn nhập 3 cạnh là 1 thủ tục, đoạn tính chu vi là 1 hàm, đoạn tính diện tích là 1 hàm. Program BT1; Var a,b,c:Real; Procedure Nhap3Canh; Begin Write(‘Nhap vao 3 so a,b,c’); Readln(a,b,c); End;.

(40) Function KiemTra(a,b,c:real):Boolean; Begin If (a<b+c) and (b<a+c) and (c<b+a) and (a>0) and (b>0) and (c>0) then KiemTra:=True Else KiemTra:=False; End; Function ChuVi(a,b,c:real):Real; Begin ChuVi:=a+b+c; End; Function DienTich(a,b,c:real):Real; Var p:Real; Begin P:=ChuVi(a,b,c)/2; DienTich:=Sqrt(p*(p-a)*(p-b)*(p-c)); End; BEGIN Nhap3Canh; If KiemTra(a,b,c)=True Then Begin Writeln(‘Chu vi cua tam giac la:’,ChuVi(a,b,c)); Writeln(‘Dien Tich cua tam giac la:’,DienTich(a,b,c)); End Else Writeln(‘3 so a, b, c khong phai la 3 canh cua 1 tam giac’); Readln; END. 2. Viết chương trình con kiểm tra 1 số nguyên nhập từ bàn phím có chia hết cho 5 hay không? Function ChiaHetCho5(n:integer):Boolean; Begin If n mod 5 =0 then ChiaHetCho5:=True Else ChiaHetCho5:=False; End; Var n:integer; BEGIN Write(‘n=’);Readln(n); If ChiaHetCho5(n)=true Then Writeln(n,’ chia het cho 5’) Else Writeln(n,’ Khong chia het cho 5’); Readln; END. 3. Viết chương trình con tìm UCLN của 2 số nguyên a, b; Sau đó sử dụng chương trình con này để rút gọn phân số có tử và mẫu nhập từ bàn phím..

(41) Function UCLN(a,b:integer):integer; Begin While a<>b do Begin If a>b then a:=a-b Else b:=b-a; End; UCLN:=a; End; Var Tu,Mau,Tu1,Mau1,UC:Integer; BEGIN Write(‘Nhap Tu so:’); Readln(Tu); Write(‘Nhap Mau so:’); Readln(Mau); Writeln(Tu,’/’,Mau); UC:=UCLN(Tu,Mau); Tu1:=Tu Div UC; Mau1:=Mau Div UC; Writeln(Tu1,’/’,Mau1); Readln; END. 4. Viết CTC để tính n! = 1.2...n. Function GiaiThua(n:Word):Longint; Var P, i:Word; Begin P:=1; For i:=1 To n Do P:=P*i; GiaiThua:=P; End; Var n: Word; Begin Write('Nhap vao n= '); Readln(n); Writeln(n,’!= ’,GiaiThua(n)); Readln; End. 5. Viết chương trình tính √n x , x>0. 1 1 Ta có: √n x = x n = e n ln x Program Tinh_can_bac_n_cua_x; Var x,S: Real; n: Word; Function CanBac(n: Word;x:real):Real;.

(42) Begin CanBac:=EXP(1/n*LN(x)); End; Begin Write('Nhap vao n= '); Readln(n); Write('Nhap vao x= '); Readln(x); Writeln(‘Can Bac ’,n,’ cua ’,x:0:2,’ la:’, CanBac(n,x):0:2); Readln; End. 6. Viết hàm xMUn(x:Real;n:Byte):Real; để tính giá trị xn. Var x:Real; n:Byte; Function xMUn(x:Real;n:Byte):Real; Var i:Byte; S:Real; Begin S:=1; For i:=1 To n Do S:=S*x; xMUn:=S; End; Begin Write(‘Nhap x=’); Readln(x); Write(‘Nhap n=’); Readln(n); Writeln(‘x mu n = ‘, xMUn(x,n):0:2); Readln; End. 7. Viết chương trình tính: F(x) = 2x 3 + 3x2 – x + 1. Với x là số thực nhập từ bàn phím. Var f:Real; Function xMUn(x:Real;n:Byte):Real; Var i:Byte; s:Real; Begin S:=1; For i:=1 To n Do S:=S*x; xMUn:=S; End; Begin Write(‘Nhap x=’); Readln(x); F:=2*xMun(x,3)+3*xMun(x,2)-x+1 Writeln(‘F= ‘, F:5:2); Readln; End..

(43) 8. Viết chương trình tính +,-,*,/ hai số bằng chương trình con: Gợi ý tính + a. Sử dụng thủ tục có tham số Procedure Tong(a,b:Real; var kq:real); Begin Kq:=a+b; End; Var c,d,kq:Real; BEGIN Write(‘Nhap 2 so:’); Readln(c,d); Tong(c,d,kq); Writeln(‘Tong cua ’,c:5:1,’ va ‘, d:5:1,’ la:’, kq:5:1); Readln; END. b. Sử dụng thủ tục không có tham số Var a,b,kq:Real; Procedure Tong; Begin Kq:=a+b; End; BEGIN Write(‘Nhap 2 so:’); Readln(a,b); Tong; Writeln(‘Tong cua ’,a:5:1,’ va ‘, b:5:1,’ la:’, kq:5:1); Readln; END. c. Sử dụng hàm có tham số Function Tong(a,b:Real):real; Begin Tong:=a+b; End; Var c,d,kq:Real; BEGIN Write(‘Nhap 2 so:’); Readln(c,d); Kq:=Tong(c,d); Writeln(‘Tong cua ’,c:5:1,’ va ‘, d:5:1,’ la:’, kq:5:1); Readln; END. d. Sử dụng hàm không có tham số Var a,b,kq:Real;.

(44) Function Tong:real; Begin Tong:=a+b; End; BEGIN Write(‘Nhap 2 so:’); Readln(a,b); Kq:=Tong; Writeln(‘Tong cua ’,a:5:1,’ va ‘, b:5:1,’ la:’, kq:5:1); Readln; END.. 9. Viết chương trình vẽ hình chữ nhật bằng dấu * sử dụng chương trình con: a. Sử dụng thủ tục có tham số Procedure HCN(d:integer;r:integer); Var i,j:integer; Begin For i:=1 to d do write(‘*’); Writeln; For j:=1 to r-2 do writeln(‘*’,’*’:d-1); For i:=1 to d do write(‘*’); Writeln; End; Var d,r:integer; Begin Write(‘Nhap chieu dai:’); Readln(d); Write(‘Nhap chieu rong:’); Readln(r); HCN(d,r); Readln; End. b. Sử dụng thủ tục không có tham số Var d,r:integer; Procedure HCN; Var i,j:integer; Begin For i:=1 to d do write(‘*’); Writeln;.

(45) For j:=1 to r-2 do writeln(‘*’,’*’:d-1); For i:=1 to d do write(‘*’); Writeln; End; Begin Write(‘Nhap chieu dai:’); Readln(d); Write(‘Nhap chieu rong:’); Readln(r); HCN; Readln; End. 10.Viết chương trình có 2 hàm có tham số: cộng a và b; chia a cho b. Trong chương trình chính sử dụng chương trình con để tinh a+b+c va a/b+c và a/(b+c) Function Tong(a,b:real):real; Begin Tong:=a+b; End; Function Chia(a,b:real):real; Begin If b<>0 then Chia:=a/b; End; Var a,b,c:real; BEGIN Write(‘Nhap a, b, c:’);Readln(a,b,c); Writeln(‘a+b+c=’,Tong(Tong(a,b),c)); If b<>0 then Writeln(‘a/b+c=’,Tong(Chia(a,b),c)) Else writeln(‘a/b+c khong tinh duoc!’); If b+c<>0 then Writeln(‘a/(b+c)=’,Chia(a,Tong(b,c))) Else writeln(‘a/(b+c) khong tinh duoc!’); Readln; End. 11.Viết chương trình cho biết giá trị nhỏ nhất trong 3 số nhập từ bàn phím, trong đó có sử dụng hàm tìm số nhỏ nhất trong 2 số. Function Min(a,b:integer):integer; Begin If a<b then min:=a Else min:=b;.

(46) End; Var a,b,c:integer; Begin Write(‘Nhap a,b,c:’);Readln(a,b,c); Writeln(‘So nho nhat la ’,Min(Min(a,b),c)); Readln; End..

(47)