Tin tức thư viện

Chức năng Dừng xem quảng cáo trên violet.vn

12087057 Kính chào các thầy, cô! Hiện tại, kinh phí duy trì hệ thống dựa chủ yếu vào việc đặt quảng cáo trên hệ thống. Tuy nhiên, đôi khi có gây một số trở ngại đối với thầy, cô khi truy cập. Vì vậy, để thuận tiện trong việc sử dụng thư viện hệ thống đã cung cấp chức năng...
Xem tiếp

Hỗ trợ kĩ thuật

  • (024) 62 930 536
  • 091 912 4899
  • hotro@violet.vn

Liên hệ quảng cáo

  • (024) 66 745 632
  • 096 181 2005
  • contact@bachkim.vn

Bồi dưỡng học sinh giỏi môn Tin học thông qua chuyên đề Pascal

Wait
  • Begin_button
  • Prev_button
  • Play_button
  • Stop_button
  • Next_button
  • End_button
  • 0 / 0
  • Loading_status
Nhấn vào đây để tải về
Báo tài liệu có sai sót
Nhắn tin cho tác giả
(Tài liệu chưa được thẩm định)
Nguồn:
Người gửi: Nguyễn Thị Kim Diệu
Ngày gửi: 19h:42' 26-12-2022
Dung lượng: 226.5 KB
Số lượt tải: 392
Số lượt thích: 0 người
CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc Lập - Tự Do - Hạnh Phúc

MÔ TẢ GIẢI PHÁP
Mã số:………………………
1. Tên sáng kiến: “kinh nghiệm bồi dưỡng học sinh giỏi môn tin học”
2. Khả năng áp dụng của giải pháp: Với đề tài này áp dụng cho tất cả giáo viên và học
sinh đang bồi dưỡng học sinh giỏi Tin học các cấp.
3. Mô tả chi tiết bản chất của giải pháp:
3.1. Tình trạng giải pháp đã biết:
a) Hiện trạng trước khi áp dụng giải pháp mới:
Trong các trường học hiện nay, việc phát triển bồi dưỡng học sinh giỏi góp phần
đào tạo nhân tài cho đất nước được xem là nhiệm vụ cần thiết và quan trọng. Cụ thể từ
năm học 2016 – 2017 Sở GD & ĐT Tỉnh Bến Tre đã đưa môn Tin học vào thi tuyển chọn
Học sinh giỏi như những môn khác. Trong quá trình bồi dưỡng, tôi luôn cố gắng tìm hiểu
nội dung cơ bản và nâng cao, tìm ra phương pháp tối ưu để cho công tác bồi dưỡng có
hiệu quả nhất.
Công tác bồi dưỡng học sinh giỏi là nhiệm vụ nặng nề nhưng cũng rất vinh dự cho
giáo viên khi tham gia bồi dưỡng. Những câu hỏi mà bất cứ ai khi tham gia bồi dưỡng học
sinh giỏi cũng luôn đặt ra là: Làm thế nào để các em lĩnh hội tốt các kiến thức khi tham
gia ôn luyện? Làm thế nào để kết quả đạt được tốt nhất? Làm thế nào để mang lại thành
tích cho các em và mang lại vinh dự cho nhà trường? Từ những băn khoăn đó, bằng tất cả
nỗ lực của bản thân, qua tìm tòi, trao đổi và thảo luận với các đồng nghiệp, tôi xin chia sẻ
kinh nghiệm với các đồng nghiệp về để tài mà tôi đã nghiên cứu trong thời gian qua:
"Kinh nghiệm bồi dưỡng học sinh giỏi môn Tin học”. Mong cùng góp một phần nhỏ
vào công tác bồi dưỡng học sinh giỏi chung của trường, của huyện, để đội ngũ học sinh
giỏi của trường, của huyện, của tỉnh ta ngày càng đạt kết quả cao hơn.
b. Ưu điểm và hạn chế của giải pháp đã thực hiện:
- Ưu điểm:
+ Hình thành các kỹ năng cơ bản cho học sinh khi học ngôn ngữ lập trình.
+ Phát huy tính tích cực, tự học, sáng tạo, nhạy bén của học sinh.
+ Giúp học sinh hứng thú trong học tập nhất là với môn ngôn ngữ lập trình, đồng
thời giúp học sinh khắc sâu kiến thức được lâu hơn.
- Khuyết điểm: Mặc dù đã có kế hoạch cụ thể, có sự chuẩn bị chu đáo, có sự quan tâm
chỉ đạo của các cấp lãnh đạo, song trong quá trình thực hiện và căn cứ vào kết quả đạt
được, chúng ta cần rút những kinh nghiệm:
+ Cần phát hiện các em thật sự có năng khiếu với môn lập trình, các em phải thật
sự nhạy bén để đưa ra được giải thuật giải quyết từng bài tập cụ thể.
+ Để có thể học tốt môn ngôn ngữ lập trình đòi hỏi các em phải trang bị cho mình
những kiến thức cơ bản về lí thuyết, sử dụng thành thạo các thao tác với máy tính khi thực
hành, tìm tòi thêm kiến thức qua sách, bạn bè, qua mạng internet,…
+ Học sinh phải có trang thiết bị thực hành (máy tính) đầy đủ.
+ Giáo viên chỉ là người gợi ý cho các em làm bài tập chứ không phải giải tất cả
các bài tập cho các em, để tạo điều kiện phát triển tư duy cho các em.

c. Sự cần thiết của việc đề suất giải pháp mới.
- Đúc kết được những kiến thức trọng tâm, nổi bật ở mỗi phần, mỗi chuyên để đưa
vào sổ tay kiến thức của học sinh. Từ đó, các em hình thành một hệ thống kiến thức cơ
bản, trọng tâm.
- Phân loại các dạng bài tập cho học sinh nắm rõ và viết chương trình một cách
khoa học hơn.
3.2. Nội dung giải pháp đề nghị công nhận là sáng kiến:
a) Mục đích của giải pháp:
- Nhằm nâng cao chất lượng dạy và học nói chung, chất lượng dạy học bộ môn Tin
Học nói riêng.
- Là động lực thúc đẩy phong trào thi đua học tập ở học sinh.
- Tạo điều kiện thuận lợi cho những học sinh có năng lực, có niềm đam mê, có
sáng tạo trong học tập bộ môn.
- Lựa chọn được đội tuyển dự thi học sinh giỏi các cấp có kết quả cao.
- Làm cơ sở cho các em định hướng và chọn lựa ngành nghề thích hợp cho tương
lai.
- Tạo được niềm tin ở các cấp lãnh đạo, ở phụ huynh và ở học sinh.
b) Nội dung giải pháp:
- Giáo viên phải hướng dẫn cho học sinh nắm được kiến thức rất cơ bản và nâng cao
theo từng chuyên đề:
+ Chuyên đề 1: Làm quen với chương trình pascal
+ Chuyên đề 2: Câu lệnh điều kiện
+ Chuyên đề 3: Câu lệnh lặp
+ Chuyên đề 4: Mảng một chiều
+ Chuyên đề 5: Xâu kí tự
+ Chuyên đề 6: Dữ liệu kiểu File.
+ Chuyên đề 7: Dãy con
+ Chuyên đề 8: Chương trình con
- Ngoài các dạng bài tập rất cơ bản mà quý thầy cô đã truyền đạt cho học sinh. Trong đề
tài này tôi đã đưa ra thêm một số dạng bài tập đặc trưng khác, cụ thể như sau:
CHUYÊN ĐỀ I: LÀM QUEN VỚI CHƯƠNG TRÌNH PASCAL
Bài tập 1: Viết chương trình tính chu vi và diện tích của hình chữ nhật có chiều dài hai
cạnh là a, b (được nhập từ bàn phím).
- Xác định bài toán:
+ Input: a, b
+ Output: S,p
- Cách giải:
+ Nhập hai cạnh vào hai biến a, b.
+ Chu vi hình chữ nhật bằng 2*(a+b); Diện tích hình chữ nhật bằng a*b.
- Chương trình minh họa:
Program Chu_nhat;

uses crt;
Var a, b, S, CV: real;
Begin
Write('Nhap chieu dai:'); readln(a);
Write('Nhap chieu rong:'); readln(b);
S := a*b;
CV := (a+b)*2;
Writeln('Dien tich hinh chu nhat la:',S);
Writeln('Chu vi hinh chu nhat la:',CV:10:2);
readln
end.
Bài tập 2: Viết chương trình tính chu vi, diện tích hình vuông có cạnh a (được nhập từ
bàn phím).
- Xác định bài toán:
+ Input: a
+ Output: p,s
- Cách giải:
+ Nhập cạnh vào biến canh.
+ Chu vi hình vuông bằng 4*canh; Diện tích hình vuông bằng canh*canh.

- Chương trình minh họa::

Program HINH_VUONG;
uses crt;
Var canh: real;
Begin
clrscr;
Write('Nhap do dai canh:');readln(canh);
Writeln('Chu vi hinh vuong la:',4*canh:10:2);
Writeln('Dien tich hinh vuong la:',canh*canh:10:2);
readln
end.

Bài tập 3: Viết chương trình tính chu vi và diện tích hình tròn có bán kính r (được nhập
từ bàn phím).
- Cách giải:
+ Nhập bán kính vào biến r.
+ Chu vi đường tròn bằng 2**r.
+ Diện tích hình tròn bằng *r*r.

- Chương trình minh họa:

Program HINH_TRON;
uses crt;
Var r: real;
Begin
clrscr;
Write('Nhap ban kinh:'); readln(r);

Writeln('Chu vi duong tron la:',2*pi*r:10:2);
Writeln('Dien tich hinh tron la:',pi*r*r:10:2);
readln
end.
Bài tập 4: Viết chương trình tính diện tích của tam giác có ba cạnh là a,b,c (được nhập từ
bàn phím)
- Cách giải:
+ Nhập ba cạnh của tam giác vào ba biến a,b,c.
+ Nửa chu vi của tam giác p = (a+b+c)/2.
+ Diện tích của tam giác: s =
.

- Chương trình minh họa:

Program TAM_GIAC;
uses crt;
Var a,b,c,p,S: real;
Begin
clrscr;
Write('Nhap canh a:');readln(a);
Write('Nhap canh b:');readln(b);
Write('Nhap canh c:');readln(c);
p:=(a+b+c)/2;
S:= sqrt(p*(p-a)*(p-b)*(p-c));
Write('Dien tich tam giac la:',s:10:2);
readln
end.

Bài tập 5: Viết chương trình cho phép tính trung bình cộng của bốn số.
- Cách giải:
+ Nhập bốn số vào bốn biến a, b, c, d
+ Trung bình cộng của a, b, c, d bằng (a + b + c + d)/4.

- Chương trình minh họa:

Program TB_Cong_4_So;
uses crt;
Var a, b, c, d: real;
Begin
Clrscr;
Write('Nhap so thu nhat:');readln(a);
Write('Nhap so thu hai:');readln(b);
Write('Nhap so thu ba:');readln(c);
Write('Nhap so thu tu:');readln(d);
Writeln('Trung binh cong: ',(a+b+c+d)/4):10:2;
Readln
end.
Bài tập 6: Viết chương trình cho phép tính trung bình cộng của bốn số với điều kiện chỉ
được sử dụng hai biến. (Học sinh tự giải)

* CHUYÊN ĐỀ 2: CÂU LỆNH ĐIỀU KIỆN:
+ Dạng thiếu:
If <điều kiện> then
vd: if (x mod 2)=0 then writeln(x,' la so chan');
+ Dạng đầy đủ:
If <điều kiện> then else
vd:  if (x mod 2) =0 then writeln(x,' la so chan') 
   else writeln(x,' la so le');
Bài 1: Nhập vào ba số a, b, c bất kì. Kiểm tra xem nó có thể là độ dài ba cạnh hay
không, nếu không thì in ra màn hình 'Khong la ba canh cua mot tam giac'. Ngược
lại, thì in diện tích, chu vi của tam giác ra màn hình.
- Xác định bài toán:
+ Input: a, b, c
+ Kiểm tra xem có phải 3 cạnh tam giác không? Nếu đúng tính chu vi diện tích
- Cách giải: Để thỏa mãn điều kiện 3 canh của tam giác thì: Tổng 2 cạnh lớn hơn một
cạnh và a, b, c>0; p:=(a+b+c)/2; s:=sqrt(p*(p-a)*(p-b)*(p-c));
- Chương trình minh họa:
Program TAMGIAC;
Uses crt;
Var a,b,c,s,p : real;
Begin
Clrscr;
Writeln('BAI TOAN TAM GIAC:');
Writeln('---------------------------------');
Write('nhap a =');readln(a);
Write ('nhap b =');readln(b);
Write('nhap c =');readln(c);
If ((a+b)>c)and((b+c)>a)and((a+c)>b) then
Begin
p:=(a+b+c)/2;
s:=sqrt(p*(p-a)*(p-b)*(p-c));
Writeln('Chu vi tam giac:',2*p:4:2) ;
Writeln('Dien tich tam giac:',s:4:2);
End
Else
Writeln(a,', ', b,', ', c, ' khong phai la ba canh cua tam giac') ; Readln;
End.
Bài 2: Tìm giá trị lớn nhất trong 4 số a, b, c, d (a, b, c, được nhập từ bàn phím).
- Xác định bài toán:
+ Input: a, b, c, d
+ Output: Max
- Cách giải: Gán giá trị lớn nhất cho a. Lấy lớn nhất lần lượt đi so sánh với các

số còn lại. Nếu lớn nhất nhỏ hơn số nào thì lấy số đó gán cho lớn nhất. Đưa lớn
nhất ra màn hình.
- Chương trình minh họa:
Program TIM_SO_LON_NHAT;
Uses crt;
Var a,b,c,d,max:real;
Begin
Clrscr;
Writeln('TIM SO LON NHAT TRONG BON SO A, B, C, D');
Writeln('---------------------------------------------------------------');
Write('Nhap a='); Readln(a);
Write('Nhap b='); Readln(b);
Write('Nhap c='); Readln(c);
Write('Nhap d='); Readln(d);
max:=a;
If b>max then
max:=b;
If d>max then max:=d;
Writeln('So lon nhat la:',max:4:2);
Readln;
End.
Bài 3: Giải hệ phương trình tuyến tính:
Ax+by=m
Cx+dy=n
- Xác định bài toán:
+ Input: a, c, b, d, m, n
+ Output: x, y
- Chương trình minh họa:
Program
GIAI_HE_HAI_AN;
Uses crt;
Var a,b,c,d,m,n:real;
dx,dy,dd:real;
Begin
Clrscr;
Writeln(' GIAI HE HAI AN:');
Writeln('----------------------------------');
Write('Nhap a='); readln(a);
Write('Nhap b='); readln(b);
Write('Nhap c=');readln(c);
Write('Nhap m=');readln(m);
Write('Nhap n='); readln(n);
dd:=a*d-b*c;
dx:=m*d-b*n;
dy:=a*n-c*m;

If dd=0 then

Else

If (dx=0) and (dy=0) then
Writeln('He vo so nghiem hoac vo nghiem') Else
writeln('He vo nghiem')

Begin
Write('He co nghiem :');
Writeln('x=',dx/dd:4:2,' va y=',dy/dd:4:2);
End;
Readln;
End.
Bài 4: Nhập vào thời gian 1 công việc nào đó là x giây. Hãy chuyển đổi và viết ra
màn hình số thời gian trên dưới dạng bằng bao nhiêu giờ, bao nhiêu phút, bao nhiêu
giây.
- Xác định bài toán:
+ Input: x
+ Output: Giờ, phút, giây
- Chương trình minh họa:
Program DOI_GIO_PHUT_GIAY;
Uses crt;
Var gio, phut,giay, x:
longint;
Begin
Clrscr;
Writeln('DOI SANG GIO PHUT GIAY');
Writeln('--------------------------------------');
Write('Nhap vao so giay: ');readln(x); gio:= x div 3600;
x:=x mod 3600; phut:=x div 60; x:=x mod 60;
Writeln('Ket qua = ', gio,'gio : ', phut, 'phut : ', x, 'giay');
Readln;
End.
Bài 5: Viết chương trình nhập hai số thực . Sau đó hỏi phép tính cần thực hiện và in kết
quả của phép tính đó.
Nếu là “+” , in kết quả của tổng lên màn hình .
Nếu là “-” , in kết quả của hiệu lên màn hình .
Nếu là “/” , in kết quả của thương lên màn hình .
Nếu là “*” , in kết quả của tích lên màn hình . Nếu là “+” , in kết quả của tổng lên màn
hình .
Nếu là “+” , in kết quả của tổng lên màn hình .
- Xác định bài toán:
+ Input: a, b, phép tính
+ Output: Kết quả phép tính
- Chương trình minh họa:
Program pheptinh;
Uses Crt ;

Var
a , b , T : Real ;
Pt : Char ;
BEGIN
Clrscr ;
Write (' a = ') ; Readln( a ) ;
Write (' b = ') ; Readln( b ) ;
Write (' Phep tinh thuc hien la (+ - * /) : ') ;
Readln( Pt ) ;
If Pt = '+' Then T := a + b ;
If Pt = '-' Then T := a - b ;
If Pt = '*' Then T := a * b ;
If Pt = '/' Then T := a / b ;
Write ( a , pt , b , ' = ', T ) ;
Readln ;
END .

CHUYÊN ĐỀ 3: CÁC VÒNG LẶP

1. FOR..TO..DO:
Cấu trúc FOR cho phép lặp lại nhiều lần một dãy lệnh. Số lần lặp lại dãy lệnh đã biết
trước. Phát biểu FOR có 2 dạng: 
 
FOR .. TO .. DO                     đếm lên
 
FOR .. DOWNTO ..DO          đếm xuống 
* Cú pháp tổng quát là:
FOR := TO/DOWNTO   DO ;
2. WHILE..DO :
Trong khi mà điều kiện còn đúng thì cứ thực hiện Công việc, rồi quay trở về kiểm tra điều
kiện lại. Vòng lặp được tiếp tục, đến khi điều kiện đặt ra không còn đúng nữa thì đi tới
thực hiện lệnh tiếp theo 
* Cú pháp : WHILE <điều kiện> DO
- Ðiều kiện trong cấu trúc lặp WHILE .. DO là một biểu thức logic kiểu
Boolean chỉ có 2 giá trị là Ðúng (True) hoặc Sai (False)
- Nếu điều kiện Ðúng thì chương trình sẽ chạy trong cấu trúc WHILE .. DO.
- Sau mỗi lần lặp, chương trình trở lại kiểm tra điều kiện. Tùy theo biểu thức logic của
điều kiện là Ðúng hay Sai thì chương trình sẽ thực hiện Công việc tương ứng.
- Nếu Sai thì chuyển xuống dưới cấu trúc WHILE .. DO
3. REAPET..UNTILL
Câu lệnh REPEAT .. UNTIL dùng trong các trường hợp khi biến điều khiển không có
kiểu rời rạc và đặc biệt trong các trường hợp số lần lặp không biết trước.
- Nếu điều kiện logic là Sai (False)  thì lặp lại lệnh cho đến khi điều kiện Ðúng  thì mới
thoát ra khỏi cấu trúc REPEAT .. UNTIL. 
- Nếu có nhiều câu lệnh thì mỗi lệnh ngăn cách nhau bằng dấu chấm phẩy (;) Công việc
của REPEAT và UNTIL không nhất thiết phải dùng lệnh ghép để nhóm từ 2 lệnh đơn trở
lên thành công việc.

Bài 1: Viết chương trình in ra các số lẻ nhỏ hơn hoặc bằng n ( Với n được nhập). Sao cho
15 số lẻ được in trên một dòng.
- Xác định bài toán:
+ Input: n
+ Output: Các số lẻ nhỏ hơn n
- Cách giải:
- Cho j =0.
- Cho biến I chạy từ 1 đến n.
- Nếu I chẵn ( I chia 2 dư 0) thì in ra số n và tăng j lên 1
- Nếu j chia hết cho 15 thì thực hiện xuống dòng (Dùng Writeln).

- Chương trình minh họa:

Program In_So_Le;
Uses crt;
var Dem,i,n: integer;
Begin
Clrscr;
Write('Nhap so n ='); readln(n);
Dem:= 0;
For i:=1 to n do if i mod 2 =1 then
Begin Write(i:3,',');
Dem:= Dem + 1;
if Dem mod 15 = 0 then Writeln;
end;
readln
end.
Bài 2: Viết chương trình in ra tất cả các ước của một số n (Với n được nhập từ bàn phím)
- Xác định bài toán:
+ Input: n
+ Output: Các ước của n
- Cách giải:
+ Cho biến i chạy từ 1 đến n.Nếu n chia hết cho i thì in ra i.
+ Chương trình minh họa:
Program Tim_uoc;
uses crt;
Var n, i: integer;
Begin
clrscr;
Write('Nhap so n ='); readln(n);
For i:=1 to n do if n mod i = 0 then write(i:3,',');
readln
end.
Bài 3: Một số có tổng các ước nhỏ hơn nó bằng chính nó được gọi là số hoàn chỉnh.
Ví dụ: 6 có các ước nhỏ hơn nó là 1, 2, 3. Tổng là 1 + 2 + 3 = 6. Viết chương trình xét
xem một số n được nhập từ bàn phím có phải là số hoàn chỉnh không.
- Xác định bài toán:

+ Input: n
+ Output: Các ước của n sao cho tổng các ước bằng chính nó.
- Cách giải:
+ Dùng biến n lưu số cần xét.
+Biến S có giá trị ban đầu bằng 0.
+ Cho i chạy từ 1 đến n-1. nếu i là ước của n thì cộng thêm i vào S.
+ Nếu S = n thì S là số hoàn chỉnh.

- Chương trình minh họa:

Program So_Hoan_Chinh;
uses crt;
var n, i, s: integer;
begin
write('nhap so n: ');readln(n);
s:=0;
for i:= 1 to n -1 do if n mod i = 0 then s:=s+i;
if s = n then write(n, ' la so hoan chinh')
else writeln(n, ' khong phai la so hoan chinh');
readln
end.
Bài 4: Viết chương trình xét xem một số n có phải là số nguyên tố không?
- Xác định bài toán:
+ Input: n
+ Output: Kiểm tra xem n có phải là số nguyên tố không?
- Cách giải:
+ Cho biến i chạy từ 2 đến n – 1 nếu n không chia hết mọi số i thì thì n là số
nguyên tố.
+ Sử dụng biến ok có kiểu boolean và có giá trị ban đầu là true. Cứ mỗi lần xét
phép chia n cho i

- Chương trình minh họa:

Program Nguyen_to_1;
uses crt;
var n, i: integer;
ok: boolean;
begin
ok:=true;
write('Nhap n: ');readln(n);
for i:= 2 to n - 1 do if n mod i = 0 then ok :=ok and false;
if ok then write(n,' la so nguyen to')
else write(n, ' khong la so nguyen to');
readln
end.
Bài 5: Viết chương trình in ra tất cả các số nguyên tố bé hơn hoặc bằng n?
- Xác định bài toán:
+ Input: n
+ Output: Các số nguyên tố nhỏ hơn n

- Cách giải:
+ Kiểm tra các số nhỏ hơn n có phải là số nguyên tố:
+ Cho biến i chạy từ 2 đến n – 1 nếu n không chia hết mọi số i thì thì n là số
nguyên tố.
+ Sử dụng biến ok có kiểu boolean và có giá trị ban đầu là true. Cứ mỗi lần xét
phép chia n cho i

- Chương trình minh họa:

Program Nguyen_to_1;
uses crt;
var n, i, j: integer;
ok: boolean;
begin
clrscr;
write('Nhap n: '); readln(n);
for i := 2 to n do
begin
ok:=true;
for j:= 2 to i - 1 do if i mod j = 0 then ok :=ok and false;
if ok then write(i,';')
end;
readln
end.
Bài 6: Viết chương trình cho phép nhập nhập một dãy gồm n số nguyên. Nhập thêm một
số và chèn thêm vào dãy sau phần tử k.
- Xác định bài toán:
+ Input: n, k
+ Output: in day mới chèn
- Cách giải:
+ Dời các phần tử từ vị trí k về sau một bước.
+ Nhập giá trị cần chèn vào vị trí k.

- Chương trình minh họa:

Program Mang_chen;
uses crt;
var M: array[1..100] of integer;
i,n,k:integer;
begin
clrscr;
write('Nhap : ');readln(n);
for i:=1 to n do
begin
write('M[',i,']='); readln(M[i]);
end;
write('Vi tri chen: ');readln(k);
for i:=n+1 downto k+1 do M[i]:=M[i-1];
write('Nhap so can chen: '); readln(M[k]);

for i:=1 to n+1 do write(M[i],', ');
readln
end.
Bài 7: Lập trình tính tích các số tự nhiên từ 1 tới 10 .
- Xác định bài toán:
+ Input: 1, 2, 3, 4.., 10
+ Output: 1*2*3*4* ..*10
- Chương trình minh họa:
Var i : Byte ;
p : word ;
BEGIN
p := 1;
For i := 1 to 10 Do
p := p * i ;
Write (' 1 * 2 * ... * 10 = ', p ) ;
Readln ;
END .
Bài 8: Cho số tự nhiên n, hãy lập trình để tính các tổng sau :
a.      1 + 1/22 + 1/32 + … + 1/n2
b.      1 + 1/2! + 1/3! + … + 1/n!
a. Var n , i : Word ;
S : Real ;
BEGIN
Write (' Nhap n : ') ; Readln (n) ;
S := 0 ;
For i := 1 To n Do
S := S + 1 / sqr(i) ;
Writeln (' S = ', S:0:2) ;
Readln ;
END .
b. Var n , i , j , p : Word ;
S : Real ;
BEGIN
Write (' Nhap n : ') ; Readln(n) ;
p := 1 ;
s := 0 ;
For i :=1 To n Do
Begin
p := p * i ; (* tính i *)
S := S + 1 / p ;
End ;
Writeln (' S = ', S:0:2) ;
Readln ;
END.

Bài 9: Viết chương trình nhập một dãy số tối đa 100 số , sau đó in ra màn hình các số
khác nhau .
Uses Crt;
Var A : Array [1..100] Of Integer;
i , j , n : Integer ;
BEGIN
Clrscr ;
Write(' Do dai cua day so N = ') ; Readln (N) ;
For I := 1 To N Do
Begin
Write ('A[', i , ']= ') ;
Readln ( A[i] ) ;
End ;
Writeln (' Cac so khac nhau la : ') ; Writeln ( A[1] ) ;
i := 2 ;
While i <= N Do
Begin
j := 1 ;
While ( j < i ) and ( A[j] <> A[i] ) Do inc(j) ;
If j = i Then Writeln( A[i] ) ;
i :=i + 1 ;
End ;
Readln ;
END .
Bài 10: Viết chương trình nhập một dãy số tối đa 100 số , sau đó sắp xếp lại theo thứ tự
tăng dần .
Program sapxep;
Uses Crt;
Var A : Array [1..100] Of Integer ;
i , j , n , T : Integer ;
BEGIN
Clrscr ;
Write(' Do dai cua day so N = ') ; Readln (N) ;
Writeln (' Nhap day so : ') ;
For i := 1 To N Do
Begin
Write('A[', i ,'] = ') ; Readln ( A[i] ) ;
End ;
i := 1 ;
While (i <= n-1) Do
Begin
j := i+1;
While j<=n do
Begin
If A[j] < A[i] then

Begin
T := A[j];
A[j ] := A[i];
A[i] := T ;
End ;
j := j + 1;

End ;
i := i + 1;
End ;
Writeln(' Day sau khi sap xep : ') ;
For i := 1 To N Do Write(A[i] : 4) ;
Readln
End.
Bài 11: Viết chương trình tìm ƯSCLN của N số được nhập từ bàn phím .
Program UCLN;
Uses crt ;
Var a : Array [1..100] Of Integer ;
n , i : Byte ;
d : integer ;
BEGIN
Clrscr ;
Writeln (' Tim USCLN cua N so :') ;
Write (' Nhap so N : ') ; Readln(n) ;
Writeln ('Nhap ', N ,' so : ') ;
For i := 1 To n Do
Begin
Write(' So thu ', i ,' = ') ; Readln( a[i] ) ;
End ;
For i := 1 To n-1 Do
Repeat
d := a[i] ;
a[i] := a[ i+1 ] mod a[i] ;
a[i+1] := d ;
Until a[i] = 0 ;
Writeln (' USCLN cua ', N ,' so la : ', a[n] ) ;
Readln ; END .

CHUYÊN ĐỀ 4: DỮ LIỆU KIỂU MẢNG:

Đối với mảng, do chương trình lớp 8 của chúng ta chỉ nghiên cứu mảng một chiều
nên trong bài này tôi cũng chỉ giới thiệu một số bài tập tiêu biểu về mảng một chiều mà
vẫn chưa đề cập đến mảng 2 chiều.
Mảng (Array) là một tập hợp các phần tử cố định có cùng kiểu gọi là kiểu phần tử. Kiểu
phần tử có thể là kiểu vô hướng, kiểu String, kiểu tập hợp, kiểu Record.
a. Khai báo
Cách 1:
TYPE =ARRAY[chỉ số] OF ;
VAR :;
Cách 2:
VAR :ARRAY[chỉ số] OF ;
Trong đó chỉ số phải là một kiểu miền con, kiểu vô hướng liệt kê, kiểu char hoặc kiểu
boolean. {Tuy nhiên. người ta thường dùng kiểu miền con các số nguyên là dễ hình dung
nhất vì nó gần giống với khái niệm chỉ số trong toán học.}
Ví dụ:
TYPE Mangnguyen = Array[1..5] of Integer;
  
  MangKytu = Array[Byte] of Char;
VAR     A: Mangnguyen;
        
C: MangKytu;
Hoặc
VAR     A: Array[1..5] of Integer;
        
C: Array[Byte] of Char;
b. Cách truy xuất
Mỗi phần tử của mảng được truy xuất thông qua tên biến mảng cùng với chỉ số của
mảng trong cặp dấu [].
Ví dụ: A[1], A[2],…
Chú ý: Hai mảng A và B có cùng số phần tử và cùng kiểu phần tử, ta có thể thay toàn bộ
phần tử A bởi các phần tử tương ứng của B bằng một phép gán A := B.
Bài 1: Lập phương trình tạo ra một mảng chứa bảng cửu chương .
- Xác định bài toán: `
+ Cách giải: Cho 2 vòng for chạy lồng nhau. Lấy các giá trị nhân với nhau.
+ Chương trình minh họa:
Program BCC;
Uses Crt ;
Var a : Array[1..10, 2..9] Of Byte ;
i, j : Byte ;
BEGIN
Clrscr ;
For i := 1 To 10 Do
For j := 2 To 9 Do a[i, j] := i*j ;
Writeln(' Bang cuu chuong : ') ; Writeln ;
For i := 1 To 10 Do
For j := 2 to 9 do
Write ( j:4 , 'x' , i:2 , '=' , a[i , j]:2) ;

Readln ;
END.
Bài 2: Nhập vào mảng 1 chiều gồm 1 dãy số nguyên N phần tử. Hãy xóa các phần tử
trùng nhau trong mảng và in kết quả ra màn hình.
* Ý tưởng: Duyệt mảng 1 chiều bằng 2 biến, nếu phát phát hiện phần tử nào trùng thì  xóa
phần tử ấy ra khỏi mảng.
Program xoamang;
   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
         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. 
Bài 3: Viết CT nhập từ bàn phím mảng 1 chiều và xóa 1 phần tử của mảng có n phần tử.

var
 
n,i,q,k,p:integer;
 
a,b:array [1..1000] of integer;
begin
  write('n= ');readln(n);
  for i:=1 to n do
    begin
     
write('a[',i,']= ');
     
readln(a[i]);
    end; 
 
write('Xoa pt co vi tri la: ');readln(p);
q:=0;
for i:=1 to n do
   
if q<>p then
    
  begin
       
inc(q);
       
b[q]:=a[i];
     
end;
 
writeln('Mang sau khi xoa la: ');
 
for i:=1 to q do
   
write(b[i],' ');
  readln
end. 
Bài 4: Viết chương trình nhập vào một mảng A gồm N số nguyên và chèn thêm vào một số
nguyên X.
var
 
n,i,q,k,p,:integer;
 
a,b:array [1..1000] of integer;
begin
 
write('n= ');readln(n);
 
for i:=1 to n do
   
begin
    
  write('a[',i,']= ');
     
readln(a[i]);
   
end;
 
write('-Chen pt va vi tri cua pt do: ');readln(k,p);
 
q:=0;
 
for i:=1 to n do 
  
begin
   
inc(q);
   
if q=p then
begin
     
b[q]:=k;
     
inc(q);
   
end;

   
b[q]:=a[i];
  end;
  writeln('-Mang sau khi chen la: ');
  for i:=1 to q do
   
write(b[i],' ');
  readln
end.
BÀI TẬP VỀ NHÀ:
Bài 5: Chương trình nhập mảng một chiều gồm n phần tử n<=100 kiểu nguyên rồi thực
hiện
a. Đếm số lượng phần tử dương cho kết quả ra màn hình
b. Tính tổng các phần tử dương trong mảng.
c. Tính trung bình các phần tử trong mảng.
d. Tính trung bình các phần tử dương trong mảng
e. Tìm vị trí đầu tiên của phần tử =k với k nhập từ bàn phím.
f. Tìm vị trí phần tử =k với k nhập từ bàn phím, nếu có nhiều phần tử =k thì
hiển thị ra màn hình tất cả vị trí phần tử=k đó.
g. Đếm số lượng phần tử là nguyên tố trong mảng.
h. Kiểm tra mảng vừa nhập có phải là cấp số cộng hay không?
i. Sắp xếp mảng theo thứ tự tăng dần các phần tử và hiển thị ra màn hình
mảng tăng đó
Bài 6: Viết chương trình nhập vào một mảng 1 chiều A có N phần tử các số nguyên
(N<=100). Nhập 1 số nguyên X, kiểm tra X có trong mảng hay không? Nếu có cho biết vị
trí của phần tử đó.
Bài 7: Viết chương trình nhập vào một mảng 1 chiều A có N phần tử các số nguyên
(N<=100). In ra màn hình
Dòng 1 : Các số nguyên tố
Dòng 2 : Các số không nguyên tố.
Bài 8: Viết chương trình nhập vào một mảng một chiều A có N phần tử các số
nguyên(N<=100). Kiểm tra các phần tử khác nhau trong mảng.
Ví dụ : Nhập vào : 5 3 7 9 5 7 11 5 7 -2 5 8 -2
In ra : 5 3 7 9 11 -2 4 8

CHUYÊN ĐỀ 5: XÂU KÍ TỰ
- Xâu kí tự là một chuyên đề nâng cao trong bài viết này nhưng do quá trình bồi
dưỡng củng như quá trình nghiên cứu tôi tự nhận thấy chương trình này không quá khó
hiểu với đối tượng học sinh của mình vì vậy tôi đã mạnh dạn đưa nội dung này vào bồi
dưỡng và một số bài ra cũng đã có nội dung này.
- Xâu ký tự là dữ liệu bao gồm một dãy các ký tự trong bảng mã ASSCII.
a. Cách khai báo:
Var: STRING[độ dài của xâu];
- Xâu ký tự trong bộ nhớ nó chiếm số byte bằng số ký tự cực đại được khai báo cộng với
byte đầu tiên chứa số ký tự hiện có của xâu. Độ dài tối đa của xâu ký tự là 255.

- Cách nhập/xuất: Cách đọc hay viết kiểu STRING cũng tương tự như các kiểu dữ liệu
khác, ta sử dụng các thủ tục READ, hoặc WRITE.
Ví dụ: 
Readln(st);
Writeln(st);
- Truy cập từng phần tử của xâu ký tự: tương tự mảng 1 chiều: thông qua tên biến kiểu
STRING và chỉ số của nó
Ví dụ: 
St := 'Le Thanh Lam';
write(st[4]);
 Kết quả: cho ra chữ T.
b. Các thao tác trên xâu ký tự:
1/ Phép cộng xâu:
Ví dụ:
st1:='Le'; st2:='Thanh'; St=st1 + st2; 
-> KQ: 'Le Thanh'
2/ Phép so sánh: 
- Hai xâu ký tự có thể so sánh với nhau bằng các phép so sánh =, >, <…
Nguyên tắc so sánh thực hiện như sau, chúng sẽ đem từng ký tự tương ứng với nhau để so
sánh, xâu nào có ký tự có số thứ tự trong bảng mã ASCII lớn hơn thì xâu đó lớn hơn.
- Hai xâu ký tự được gọi là bằng nhau khi chúng hoàn toàn giống nhau (có độ dài
như nhau).
Ví dụ: 'FILENAME' = 'FILENAME '
3/ Các thủ tục và hàm chuẩn xử lý xâu ký tự:
* 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.
* 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'.
* 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';
* 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ó nguyên có giá trị: n:=150;
STR(n:5,st) sẽ cho kết quả xâu st là: st=' 150';
* 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.
* 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';
* Hàm CONCAT(s1,s2,…,sn): hàm cho ra 1 xâu mới bằng cách nối đuôi các xâu s1,s2,
…,sn lại với nhau.
Ví dụ: CONCAT('Le ','Thanh ', 'Lam') = 'Le Thanh Lam';
* 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;
Bài 1: Viết chương trình nhập vào từ bàn phím một xâu kí tự S và thông báo ra màn hình
số lần xuất hiện của mổi chứ cái tiếng Anh trong S ( không phân biệt chữ hoa và chữ
thường).
Uses Crt;
Var    St:String;
       dem: Array['A'..'Z'] Of Byte;
       i:Byte;
       ch:Char;
Begin
     Write('Nhap xau St: '); Readln(St);
     For ch:='A' To 'Z' Do dem[ch]:=0;
     For i:=1 To Length(St) Do
        If Upcase(St[i]) IN ['A'..'Z'] Then  Inc(dem[Upcase(St[i])]);
     For ch:='A' To 'Z' Do 
         If dem[ch]>0 Then Writeln(ch,' : ',dem[ch]);
    Readln;
End.
Bài 2: Viết chương trình nhập vào xâu, đưa ra xâu đảo theo từ. Ví dụ: đi xe đạp  đạp
xe đi. 
uses crt;
var s:string;
    x,y,z,t:byte;
begin
 
write('Nhap vao mot xau: ');
 
readln(s);
 
z:=length(s);
 
for y:=length(s) downto 1 do
 
begin
   
if ((s[y]=' ')or(y=1)) then
begin
for t:=y to z do
write(s[t]);z:=y
end;
   
write(' ');
  end;
  readln;
end. 
Bài 3: Viết ct nhập vào xâu có cả chữ và số, rồi cho xuất ra có bao nhiêu kí tự chữ và bao
nhiêu kí tự số.

var s: string;cs,cc,i: integer;
begin
 
write('Nhap mot xau ky tu: ');
 
readln(s);
 
cs:=0;
 
cc:=0;
 
for i:=1 to length(s) do
 
begin
 
if (s[i] in ['0'..'9']) then
cs:=cs+1;
  if s[i] in ['A'..'Z'] + ['a'..'z'] then
cc:=cc+1;
 end;
 write('So cac ki tu la chu so:',cs:2,'  So cac ki tu la chu cai:',cc:4);
 readln
end. 
Bài 4: Viết chương trình nhập một xâu ký tự St từ bàn phím và một ký tự ch. In ra màn
hình xâu St sau khi xóa hết các ký tự ch trong xâu đó.
var St:string; n:char; i:byte;
begin
writel(' Nhap chuoi : '); readln(st);
write(' Nhap ki tu : '); readln(n);
for i:=1 to length(st) do
if st[i] = n then
delete(st,i,1);
writeln('Chuoi sau khi xoa: ',st);
readln
end.

CHUYÊN ĐỀ 6: DỮ LIỆU KIỂU FILE

I. KHAI BÁO:
Type
= File of ;
Var
: ;
hoặc khai báo trực tiếp:
Var
: File of ;
Ví dụ:
Type SanPham = File of Record
Ten: String[20];
SoHieu: Byte;
Var
f,g: SanPham;
hoặc khai báo trực tiếp:
Var
f,g: File of Record;
Ten: String[20];
SoHieu: Byte;
Chú ý:


Pascal theo dõi các thao tác truy nhập thông qua con trỏ file. Mỗi khi một
phần tử nào đó được ghi vào hay đọc từ file, con trỏ của file này được tự động
chuyển đến phần tử tiếp theo.

Các biến kiểu file không được phép có mặt trong phép gán hoặc trong các
biểu thức.
II. CÁC THỦ TỤC VÀ HÀM CHUẨN:
1. Các thủ tục chuẩn:
1.1. Gán tên file
Cú pháp: Assign(F, Filename);
Chức năng: Gán một file trên đĩa có tên là Filename cho biến file F, mọi truy xuất
trên file cụ thể được thực hiện thông qua biến file này.
Chú ý:
Filename bao gồm cả tên ổ đĩa và đường dẫn nếu file không nằm trong ổ đĩa, thư
mục hiện thời.
1.2. Mở file mới
Cú pháp: Rewrite(F);
Chức năng: Tạo file mới có tên đã gán cho biến file F. Nếu file đã có trên đĩa thì
mọi dữ liệu trên đó sẽ bị xoá và con trỏ file trỏ ở vị trí đầu tiên của file.
1.3. Mở file đã có trên đĩa
Cú pháp: Reset(F);
Chức năng: Mở file có tên đã gán cho biến file F. Nếu file chưa có trên đĩa thì
chương trình sẽ dừng vì gặp lỗi xuất/nhập.
Chú ý: Kiể...
 
Gửi ý kiến