Sáng kiến kinh nghiệm chương trình con

  • 11 trang
  • file .pdf
BM 01-Bìa SKKN
SỞ GIÁO DỤC VÀ ĐÀO TẠO ĐỒNG NAI
TRƯỜNG THPT XUÂN HƯNG
Mã số: ................................
SÁNG KIẾN KINH NGHIỆM
CHƯƠNG TRÌNH CON
Người thực hiện: Nguyễn Văn Bính
Lĩnh vực nghiên cứu:
Quản lý giáo dục 
Phương pháp dạy học bộ môn: Tin học 11 
Phương pháp giáo dục 
Lĩnh vực khác: ......................................................... 
Có đính kèm:
 Mô hình  Phần mềm  Phim ảnh  Hiện vật khác
Năm học: 2011-2012
BM02-LLKHSKKN
SƠ LƯỢC LÝ LỊCH KHOA HỌC
I. THÔNG TIN CHUNG VỀ CÁ NHÂN
1. Họ và tên: NGUYỄN VĂN BÍNH
2. Ngày tháng năm sinh: 15/08/1982
3. Nam, nữ: Nam
4. Địa chỉ: Ấp 2A, Xuân Hưng, Xuân Lộc, Đồng Nai
5. Điện thoại: (CQ)/ (NR); ĐTDĐ: 01667489510
6. Fax: E-mail: [email protected]
7. Chức vụ: Giáo Viên
8. Đơn vị công tác: TRƯỜNG THPT XUÂN HƯNG
II. TRÌNH ĐỘ ĐÀO TẠO
- Học vị (hoặc trình độ chuyên môn, nghiệp vụ) cao nhất: CỬ NHÂN
- Năm nhận bằng: 2004
- Chuyên ngành đào tạo: TOÁN – TIN HỌC
III. KINH NGHIỆM KHOA HỌC
- Lĩnh vực chuyên môn có kinh nghiệm: Giảng dạy môn Tin học
Số năm có kinh nghiệm: 6 năm
- Các sáng kiến kinh nghiệm đã có trong 5 năm gần đây:
BM03-TMSKKN
CHƯƠNG TRÌNH CON
I. LÝ DO CHỌN ĐỀ TÀI
- Lập trình là vấn đề tương đối m i đối v i học sinh THPT, đặt biệt là học
sinh v ng nông thôn như trường THPT Xuân Hưng. Trong uá trình lập trình nếu
học sinh không n m vững về chương trình con thì thường d n đến các sai sót d n t i
chương trình không đạt đư c kết uả như mong muốn.
- Đ học sinh có th hi u kĩ hơn và nhận thấy đư c l i ích c a chương trình
con trong uá trình lập trình đ giải uyết các bài toán. Tạo hứng th trong uá trình
học tập.
II. THỰC TRẠNG TRƯỚC KHI THỰC HIỆN CÁC GIẢI PHÁP CỦA ĐỀ
TÀI
1. Thuận lợi
- Học sinh đã đư c tiếp cận một số thuật toán l p dư i.
- Đã s dụng ngôn ngữ lập trình Pascal đ viết chương trình giải uyết các bài
toán trong uá trình học.
- Đư c sự hỗ tr c a các thành viên trong tổ.
2. Khó khăn
- Do bư c đầu tiếp cận việc lập trình nên khả năng c n hạn chế.
- hả năng diễn đạt cách giải một bài toán sang thuật toán c n nhiều khó
khăn do học sinh v ng nông thôn khả năng tin học c n hạn chế.
- hả năng chuy n đổi t thuật toán đã biết sang ngôn ngữ lập trình cụ th
c n gặp nhiều khó khăn.
III. NỘI DUNG ĐỀ TÀI
1. Cơ sở lý luận
- Ngày nay việc lập trình đ giải uyết các bài toán trong các lĩnh vực đã
tr nên rất phổ biến. Đ giải uyết các bài toán l n thì cách lập trình
không s dụng chương trình con khó có th thực hiện đặc biệt là đối v i
các bài toán l n cần nhiều người tham gia.
- Làm cơ s cho học sinh sau này tiếp cận v i phương pháp lập trình
khác.
2. Nội dung, biện pháp thực hiện các giải pháp của đề tài
- Nêu ra cách lập trình giải uyết một số bài toán thường gặp trong toán học
và các bài tập liên uan đ học sinh hi u rõ hơn cách viết chương trình con trong
Pascal t đó có th tự mình giải uyết một số bài toán tương tự .
A. TÓM TẮT LÝ THUYẾT:
I/ hái niệm chương trình con:
Chương trình con là một dãy lệnh mô tả một số thao tác nhất định và có th đư c thực hiện
(đư c gọi) t nhiều vị trí trong chương trình.
II/ Phân loại và cấu tr c chương trình con
1. Phân loại
- Hàm (function) là chương trình con thực hiện một số thao tác nào đó và trả về một
giá trị ua tên c a nó.
- Th tục (procedure) là chương trình con thực hiện các tháo tác nhất định nhưng
không trả về giá trị ua tên c a nó.
2. Cấu tr c chương trình con
a. Cấu tr c c a th tục:
Procedure [(danh sách tham số)];
[]
Begin
[];
End;
b. Cấu tr c c a hàm:
- Hàm có cấu tr c tương tự như th tục, tuy nhiên có khác nhau phần đầu.
- hai báo phần đầu một hàm như sau:
Function [(danh sách tham số)]:;
- i u dữ liệu là ki u dữ liệu c a giá trị mà hàm trả v và chỉ có th là các ki u:
integer, real, char, boolean, string.
- hác v i th tục, trong thân hàm cần có lệnh gán giá trị cho tên hàm:
:= ;
3. Một số khái niệm
- Tham số hình thức: Các biến đư c khai báo cho dữ liệu vào/ra đư c gọi là tham
số hình thức.
- Tham số thực sự: Đ thực hiện (gọi) một chương trình con, ta cần phải có lệnh
gọi nó tương tự lệnh gọi hàm hay th tục chuẩn, bao gồm tên chương trình con
v i tham số (nếu có) là các hằng và biến chứa dữ liệu và và ra tương ứng v i các
tham số hình thức đặt trong cặp dấu ngoặc ( và ). Các hằng và biến này đư c gọi
là các tham số thực sự.
- Biến cục bộ là biến đư c khai báo đ d ng riêng trong chương trình con
- Biến toàn cục là biến đư c d ng tại mọi vị trí trong chương trình
- Tham số giá trị ( tham trị) trong lệnh gọi th tục các tham số hình thức đư c
thay bằng các tham số thực sự tương ứng là các giá trị cụ th đư c gọi là các
tham số giá trị.
- Tham số biến (tham biến) trong lệnh gọi th tục các tham số hình thức đư c
thay bằng các tham số thực sự tương ứng là các biến chứa dữ liệu ra đư c gọi là
các tham số biến.
- Đ phân biệt tham số biến và tham trị, Pascal s dụng t khóa Var đ khai báo
tham số biến.
B. BÀI TẬP ÁP DỤNG:
I/ BÀI TẬP SỬ DỤNG THỦ TỤC
Bài tập 1: Viết chương trình nhập vào số nguyên dương N (N≤ 300) và dãy A gồm N số
nguyên. S p xếp dãy số v a nhập thành dãy không giảm và xuất dãy đư c s p xếp ra ngoài
màn hình.
Phân tích:
- Thiết kế một chương trình con phục vụ việc nhập dãy số.
- Thiết kế một chương trình con phục vụ việc xuất dãy số ra màn hình.
- Thiết kế một chương trình con d ng đ thực hiện công việc s p xếp.
- Các chương trình con trên không cần trả về một giá trị cụ th nào nên d ng
th tục.
- Đối v i th tục nhập mảng cần phải dữ lại các thay đổi bên trong nên s dụng
tham số biến.
- Đối v i th tục s p xếp cần giữ lại các giá trị sau khi s p xếp nên khai báo
mảng là tham số biến, số lư ng phần t không thay đổi nên d ng tham trị.
Chương trình:
Program sapxepdayso;
Uses CRT;
Const Nmax = 300;
Type ArrInt = Array[1..300] of integer;
Var
A: ArrInt;
N: integer;
Procedure Nhap_Mang(var A: ArrInt; var M: integer);
Var i: integer;
Begin
Write(‘Nhap so phan tu cua day so:’); Readln(M);
For i:=1 to M do
Begin
Write(‘A[‘,i,’]=’); Readln(A[i]);
End;
End;
Procedure Hoan_doi(var a,b:integer);
Var tam: integer;
Begin
tam:= a;
a := b;
b:= tam;
End;
Procedure Sap_xep(var A: ArrInt; M: integer);
Var i, j: integer;
Begin
For j:=M downto 2 do
For i:=1 to j-1 do
If A[i] > A[i+1] then Hoan_doi(A[i],A[i+1]);
End;
Procedure Xuat_mang(A: ArrInt; M: integer);
Var i: integer;
Begin
For i:=1 to M do
Write(A[i]: 5);
End;
BEGIN
Clrscr;
Nhap_mang(A,n);
Sap_xep(A,n);
Xuat_mang(A,n)
Readln
END.
Bài tập tương tự:
1. Viết chương trình nhập vào một dãy số nguyên dương B gồm M phần t (M≤300).
Tìm giá trị nhỏ nhất c a dãy.
2. Viết chương trình nhập vào số nguyên dương N (N≤ 300) và dãy A gồm N số
nguyên. S p xếp dãy số v a nhập thành tăng và xuất dãy đư c s p xếp ra ngoài màn
hình.
Bài tập 2: Viết chương trình đọc dữ liệu t tệp A.IN đưa vào mảng A: d ng đầu tiên trong
tệp A.IN chứa số phần t c a mảng A, d ng thứ 2 chứa các số nguyên là các giá trị c a các
phần t trong mảng mỗi số cách nhau b i một dấu cách, sau đó tạo ra mảng B trong đó B[i]
là tổng i phần t đầu tiên trong mảng A. Ghi các giá trị c a mảng B ra tệp B.OUT.
Phân tích:
- Thiết kế một th tục phục vụ đọc dữ liệu t tệp.
- Thiết kế một th tính các giá trị c a dãy B
- Thiết kế một th tục ghi các giá trị c a dãy B ra tệp
Chương trình:
program TEP_DL;
const input='A.IN';
output='B.OUT';
max=300;
var A, B:array[1..max] of integer;
i, n: integer;
procedure Doc_DL;
var f:text;
i: integer;
Begin
assign(f,input);
reset(f);
readln(f,n);
for i:=1 to n do
read(f,A[i]);
close(f);
End;
procedure XuLi_DL;
var i:integer;
Begin
B[1]:=A[1];
for i:=2 to n do
B[i]:=B[i-1]+A[i];
End;
Procedure Ghi_DL;
var i: integer;
f:text;
Begin
assign(f,output);
rewrite(f);
for i:=1 to n do
write(f,B[i]:3);
close(f);
End;
Begin
Doc_DL;
XuLi_DL;
Ghi_DL;
End.
Bài tập tương tự:
1 Viết chương trình s p xếp dãy số chứa trong tệp INPUT.IN (d ng 1: Chứa số n, d ng
2:chứa n số nguyên cách nhau b i dấu cách). Ghi dãy số đư c s p tăng dần ra tệp
OUTPUT.OUT.
2 Viết chương trình đọc dãy số chứa trong tệp INPUT.IN (d ng 1: Chứa số n, d ng 2:chứa
n số nguyên cách nhau b i dấu cách). Cho biết trong dãy số có bao nhiêu số chẵn, bao
nhiêu số lẻ và tính tổng số chẵn, tổng số lẻ rồi ra tệp OUTPUT.OUT( d ng đầu tiên
ghi 2 số: số đầu tiên là số lư ng số chẵn trong dãy, số kế tiếp là tổng các số chẵn;
d ng thứ 2 ghi 2 số: số đầu tiên là số lư ng số lẻ trong dãy, số kế tiếp là tổng các số
lẻ)
II. BÀI TẬP SỬ DỤNG HÀM
Bài toán 1: Viết chương trình tính n giai th a. Trong đó n là số nguyên dương đư c nhập
vào t bàn phím khi chạy chương trình.
Phân tích: Cần thiết kế một chương trình con(hàm) đ tính giai th a
Chương trình:
Program Giai_thua;
Uses CRT;
Var n: word
Fucntion GT(k: word): longint;
Var T, i: word;
Begin
T:= 1;
For i:=1 to k do
T:= T* i;
GT:=T;
End;
BEGIN
Clrscr;
Write(‘nhap n:’); readln(n);
Write(n,’!=’, GT(n));
Readln
END.
Bài tập tương tự:
1. Viết chương trình tính tổng S= a! + b! + c!. Trong đó a, b, c là các số nguyên dương
đư c nhập vào t bàn phím khi chạy chương trình.
2. Viết chương trình tính chỉnh h p Ank . Trong đó n, k là các số nguyên dương đư c
nhập vào t bàn phím khi chạy chương trình.
3. Viết chương trình tính tổ h p Cnk . Trong đó n, k là các số nguyên dương đư c nhập
vào t bàn phím khi chạy chương trình.
Bài toán 2: Tính tổng lũy th a S=ax+by+cz. Trong đó a, b, c là các số thực; x, y, z là các số
nguyên dương. Giá trị c a các số này đư c nhập vào t bàn phím khi chạy chương trình.
Program Tong_luy_thua;
Uses CRT;
Var a,b,c: real;
x, y, z: word;
Fucntion Luythua(x:real; k: word): real;
Var i: integer;
T:real;
Begin
T:= 1;
For i:=1 to k do
T:= T* x;
Luythua:=T;
End;
BEGIN
Clrscr;
Write(‘nhap a,b,c,x,y,z:’); readln(a,b,c,x,y,z);
S:=Luythua(a,x)+ Luythua(b,y)+Luythua(c,z);
Write(‘Tong luy thua:’,s:8:2);
Readln
END.
Bài tập tương tự:
xk  y q
1. Viết chương trình tính giá trị T= 20 20 . Trong đó x, y là số thực; , k là các số
x y
nguyên, các so này đư c nhập vào t bàn phím khi chạy chương trình.
2. Viết chương trình tính tổng S= x100+ y200+z50. Trong đó x, y, z là các số thực đư c
nhập vào t bàn phím khi chạy chương trình.
Bài tập 3: Cho chiều dài c a ba cạnh tam giác. Viết chương trình tính chu vi, diện tích,
chiều dài các đường cao, chiều dài các đường trung truyến c a tam giác.
Program Tam_giac;
Uses CRT;
Fucntion Chuvi(a,b,c: real): real;
Begin
Chuvi:=a+b+c;
End;
Fucntion Dientich(a,b,c: real): real;
Var p: real;
Begin
p:=(a+b+c)/2;
Dientich := sqrt(p*(p-a)*(p-b)*(p-c));
End;
Fucntion Trungtuyen(a,b,c: real): real;
Begin
Trungtuyen:=sqrt(((b*b+c*c )- a*a)/(4*a))
End;
Fucntion Chieucao( a,b,c, x: real): real;(*x là chiều cao c a cạnh tương ứng cần tính*)
Begin
Chieucao := 2*Dientich(a,b,c)/x;
End;