SKKN Vận dụng pascal giải quyết một số bài toán SKKN Vận dụng pascal giải quyết một số bài toán SKKN Vận dụng pascal giải quyết một số bài toán SKKN Vận dụng pascal giải quyết một số bài toán SKKN Vận dụng pascal giải quyết một số bài toán SKKN Vận dụng pascal giải quyết một số bài toán SKKN Vận dụng pascal giải quyết một số bài toán SKKN Vận dụng pascal giải quyết một số bài toán SKKN Vận dụng pascal giải quyết một số bài toán SKKN Vận dụng pascal giải quyết một số bài toán SKKN Vận dụng pascal giải quyết một số bài toán SKKN Vận dụng pascal giải quyết một số bài toán SKKN Vận dụng pascal giải quyết một số bài toán SKKN Vận dụng pascal giải quyết một số bài toán
Trang 1A P H Ầ N
I:
ĐẶT VẤN ĐỀ 1) Lý do chọn đề tài:
Sự phát triển mạnh mẽ như vũ bão của Tin học đã làm cho xã hội có nhiều nhận thức mới về cách tổ chức các hoạt động Nhiều quốc gia trên thế giới ý thức được rất rõ tầm quan trọng của tin học và có những đầu tư lớn cho lĩnh vực này, đặc biệt trong giáo dục nâng cao dân trí về Tin học và đào tạo nguồn nhân lực có chất lượng cao Người Việt Nam có nhiều tố chất thích hợp với ngành khoa học này, vì thế chúng ta hi vọng có thể sớm hoà nhập với khu vực và trên thế giới
Trong thời đại thông tin bùng nổ ngày nay, việc lập được các chương trình tự hoạt động cho máy tính, máy gia dụng là cần thiết Và để làm được việc đó cần có một quá trình nghiên cứu, học tập về ngôn ngữ lập trình lâu dài, qua đó nhà lập trình có thể chọn một ngôn ngữ lập trình thích hợp
Song môn Tin học ở bậc Trung học cơ sở là một môn học tự chọn Do vậy mà môn Tin học ở bậc THCS được xây dựng trên giả thiết là một môn học mới nên học sinh phải học lại từ đầu Vả lại môn tin học nhằm cung cấp cho học sinh những kiến thức về ngành khoa học Tin học, hình thành và phát triển khả năng tư duy thuật toán, năng lực sử dụng các thành tựu của ngành khoa học trong học tập và trong lĩnh vực hoạt động của mình sau này Đặc biệt
là về kiến thức sẽ trang bị cho học sinh một cách tương đối có hệ thống các khái niệm cơ bản nhất ở mức THCS về tin học, một ngành khoa học với những đặc thù riêng, các kiến thức về hệ thống, thuật toán, cấu trúc dữ liệu, lập trình, … Về kỹ năng thì học sinh bước đầu biết được sử dụng máy tính, biết soạn thảo văn bản, biết sử dụng Internet, khai thác được các phần mềm thông dụng, giải được các bài toán đơn giản bằng máy tính Còn về thái độ thì rèn luyện cho học sinh phong cách suy nghĩ và làm việc khoa học như sự ham hiểu biết, tìm tòi, sáng tạo, chuẩn mực chính xác trong suy nghĩ và hành động, say mê môn học, cẩn thận trong công việc, hợp tác tốt với bạn bè Tin học là một môn học rất mới ở các trường THCS nên học sinh còn nhiều bỡ ngỡ khi tiếp cận với môn học này Nội dung tin học lập trình lớp 8 là một nội dung mới lạ đối với học sinh với nhiều khái niệm, thuật ngữ, cấu trúc
Trang 2dữ liệu mà học sinh mới được tiếp xúc lần đầu.
Tuy nhiên mọi thứ điều có điểm khởi đầu của nó, với học sinh việc học ngôn ngữ lập trình Turbo Pascal là khởi đầu cho việc tiếp cận ngôn ngữ lập trình bậc cao, qua đó giúp các em hình dung được sự ra đời, cấu tạo, hoạt đông cũng như ích lợi của các chương trình hoạt động trong máy tính, các máy tự động… Qua đó giúp các em có thêm một định hướng, một niềm đam
mê về Tin học, về nghề nghiệp mà các em chọn sau này
Xuất phát từ cơ sở trên, tôi đã chọn đề tài “Vận dụng Pascal giải quyết một
số bài toán”.
2) Mục đích nghiên cứu:
Do gặp phải những bài toán khó nên khi giải các em gặp rất nhiều khó khăn, đôi khi dẫn đến nản chí, do đó khi cho các em lập trình giải các bài toán bằng máy tính, sẽ gây được hứng thú tìm tòi và học tập Vì vậy trong nội dung đề tài này tôi giới thiệu việc lập trình giải một vài bài toán toán học để giúp cho học sinh lớp 8,9
Tuy vậy, đối với đối tượng học sinh khá giỏi, đa phần các em rất hào hứng với việc học lập trình, cụ thể là ngôn ngữ lập trình Turbo Pascal Do đó,
đề tài này giúp học sinh có thêm kĩ năng lập trình Pascal thông qua một số
ví dụ từ cơ bản đến nâng cao thích hơn với mọi đối tượng học sinh
3) Phạm vi đề tài:
Các chú ý khi dạy ngôn ngữ lập trình nói chung, ngôn ngữ lập trình Turbo Pascal nói riêng là rất nhiều, rất phong phú Tuy nhiên trong phạm vi sáng kiến kinh nghiệm này tôi chỉ trình bày một số kinh nghiệm của cá nhân tôi qua một số bài tập cụ thể
4) Đối tượng, kế hoạch và phạm vi nghiên cứu:
Đối tượng nghiên cứu: học sinh các lớp 8A, 8B, 8C trường THCS Đỉnh Bàn năm học 2015 - 2016
Kế hoạch nghiên cứu: ở các tiết bài tập và thực hành
Phạm vi nghiên cứu: toàn bộ chương trình tin học lớp 8
B PHẦN II.
CHƯƠNG I: TỔNG QUAN NỘI DUNG
1 Cơ sở lí luận:
Trang 3Trong bối cảnh toàn ngành Giáo dục và Đào tạo đang nổ lực đổi mới
Trang 4phương pháp dạy học theo hướng phát huy tính tích cực chủ động của học sinh trong hoạt động học tập Điều 24.2 của Luật giáo dục đã nêu rõ :
“Phương pháp giáo dục THCS phải phát huy tính tích cực, tự giác, chủ động,
sáng tạo của học sinh, phù hợp với đặc điểm của từng lớp học, môn học; bồi dưỡng phương pháp tự học, rèn luyện kỹ năng vận dụng kiến thức vào thực tiễn, tác động đến tình cảm, đem lại niềm vui, hứng thú học tập cho học sinh”.
Như vậy, chúng ta có thể thấy định hướng đổi mới phương pháp dạy học đã được khẳng định, không còn là vấn đề tranh luận Cốt lõi của việc đổi mới phương pháp dạy học ở THCS là giúp học sinh hướng tới việc học tập chủ động, chống lại thói quen học tập thụ động Với một số nội dung trong đề tài này, học sinh có thể tự học, tự rèn luyện thông qua một số bài tập, dạng bài tập
cụ thể
2 Cơ sở thực tiễn:
Qua thực tế giảng dạy ở trường THCS Đỉnh Bàn các năm qua, tôi nhận thấy khi học đến chương trình tin học lớp 8 đa số học sinh đều nhận xét bộ môn tuy khó nhưng gây được hứng thú khi giải quyết được các bài toán toán học bằng máy tính với nhiều bộ test khác
nhau
Nhiều học sinh tỏ ra rất thích thú khi lập trình để giải được một bài toán và cho chạy ra kết quả đúng Từ đó hăng say lập trình giải quyết các bải toán khó hơn Bằng cách này sẽ giúp phần nào cho các em trong việc học toán, một môn khá khó
C
H Ư Ơ N G II : NỘI DUNG VẤN ĐỀ NGHIÊN CỨU
I GIỚI THIỆU VỀ PASCAL:
Pascal là ngôn ngữ lập trình bậc cao do giáo sư Niklaus Wirth (trường đại học mỹ thuật, Zurich, Thụy Sĩ) sáng tác và công bố vào đầu những năm
1970, với tên Pascal để kỷ niệm nhà toán học người Pháp Blaise Pascal, thế
kỷ 17 Lúc đầu, Pascal được sáng tác ra với mục đích làm một ngôn ngữ máy tính để dạy học cho sinh viên ở các trường đại học: nó giúp cho sinh viên cũng như những người mới học lập trình có được thói quen viết một chương trình có cấu trúc sáng sủa, rõ ràng, dễ hiểu và dễ đọc cho các đối tượng khác nhau Trước khi có Pascal, các sinh viên đều được học ngôn ngữ lập trình Fortran, một ngôn ngữ lâu đời nhất và là một ngôn ngữ không có cấu
Trang 5trúc Giáo sư Wirth thấy rằng có thể tránh được rất nhiều.
Pascal là một ngôn ngữ lập trình cho máy tính thuộc dạng mệnh lệnh,
là ngôn ngữ đặc biệt thích hợp cho kiểu lập trình có cấu trúc.Pascal dựa trên ngôn ngữ lập trình Algol Cho đến nay Pascal vẫn được dùng để giảng dạy về lập trình trong nhiều trường trung học và đại học trên thế giới, và nhiều thế hệ sinh viên đã "vào đời" thông qua việc học Pascal như ngôn ngữ vỡ lòng trong các chương trình học đại cương Nhiều biến thể của Pascal ngày nay vẫn còn được sử dụng khá phổ biến, cả trong giảng dạy lẫn trong công nghiệp phát triển phần mềm.Phần lớn hệ điều hành Macintosh được viết bằng Pascal Hệ sắp chữ TeX được Donald Knuth viết bằng ngôn ngữ mang nhiều yếu tố của Pascal.Trong chương trình Tin học cấp trung học phổ thông,
ở lớp 11 phần lập trình đơn giản, học sinh được học ngôn ngữ lập trình Pascal
để lập trình giải các bài toán trong chương trình trung học và cũng như nội dung thi học sinh giỏi môn Tin học đều sử dụng ngôn ngữ lập trình Pascal để giải các bài toán đó
II.CẤU TRÚC CHUNG CỦA CHƯƠNG TRÌNH PASCAL
Cấu trúc chung, tổng quát nhất của một chương trình Pascal gồm ba phần:
- Phần tiêu đề của chương trình
- Phần khai báo dữ liệu hằng, biến, mô tả kiểu dữ liệu, khai báo
chương trình con
- Phần thân chương trình chứa các lệnh để máy tính thực hiện
Program Ten_chuong_trinh; Uses
Ten_thu_vien; Const
Ten_hang…
Type
… Var … Procedure
Begin
…
End;
…
…
Fuction
Begin
Trang 6…
End;
…
BEGIN
Các câu lệnh;
END
III MỘT SỐ BÀI TOÁN
1 BÀI TOÁN 1 : Viết chương trình giải phương trình ax + b=0
a Ý t ư ởng :
- Nhập a, b bất kỳ
- Xét 3 trường hợp:
+ Nếu a ≠ 0 thì kết luận phương trình đã cho có 1 nghiệm
x = - b/a + Nếu a = 0 và b = 0 thì kết luận phương trình đã cho có vô
số nghiệm
+ Nếu a = 0 và b ≠ 0 thì kết luận phương trình vô nghiệm
b, Mã chương trình:
c Chạy c h ư ơng t r ình :
Trang 72 BÀI TOÁN 2 : Giải phương trình: ax2 + bx + c = 0 (a ≠ 0)
a Ý t ư ởng :
Dùng ∆ = b2 – 4ac
Xét 3 trường hợp: ∆ < 0, ∆ > 0, ∆ = 0
+ Nếu ∆ <0 thì kết luận phương trình đã cho vô nghiệm
+ Nếu ∆ = 0 thì kết luận phương trình đã cho có 1 nghiệm kép là –b/2*a + Nếu ∆ > 0 thì kết luận phương trình đã cho có 2 nghiệm phân biệt
là x1:= (-b – sqrt(Delta))/2*a; x2:= (-b + sqrt(Delta))/2*a;
b,
Mã chương trình:
Trang 8c Chạy c h ư ơng t r ình
3 BÀI TOÁN 3.1 : Tính N!
a Ý t ư ởng : Dùng chương trình con và kiến thức toán học về N!
Trang 9b Ch ư ơng trình
c Chạy thử chương trình
3 BÀI TOÁN 3.2 :Viết chương trình thực hiện 2 nội dung sau Nhập số tự
nhiện n từ bàn phím
- Tính tổng:
- Tính tổng các chử số n3
3 BÀI TOÁN 3.3 : Tính tổng
3 BÀI TOÁN 3.4 :Viết chương trình nhập số tự nhiên n>1 từ bàn phím
Tính và ghi ra màn hình giá trị s=(
4.
BÀI TOÁN 4 .1 : Tìm ước chung lớn nhất của hai số.
a, Ý tưởng : nếu m>n thì m – n ngược lại n –m cho đến khi m=n thì UCLN la
m hoặc n
b, Mã chương trình:
Program UCLN;
Var m,n:Integer;
Begin
Write('Nhap so m=');Readln(m);
Write('Nhap so n=');Readln(n);
While m<>n do
Begin
if m>n then
m:=m -n
else n:=n - m;
End;
Write('UCNN hai so la = ',m);
Readln;
End
4.
BÀI TOÁN 4 .2 : Nhập 3 số thực, kiểm tra xem chúng có phải là độ dài của 3
Trang 10cạnh tam giác không, nếu có thì nó là tam giác gì (tam giác cân, tam giác đều, tam giác vuông)?
a, Ý tưởng: - Hai cạnh cộng lại lớn hơn cạnh thứ 3 thì in raba cạnh tam giac
- Có 2 trong ba cạnh bằng nhau thì in ra là tam giác cân
- Nếu bình phương của một cạnh bằng tổng bình phương 2 cạnh còn lại thì in ra tam giác vuông
- Ngược lại ba cạnh không phải la ba cạnh tam giác
b, Mã chương trình:
Program Kiem_tra_ba_canh_tam_giac;
uses crt;
var a,b,c: real;
begin
clrscr;
write('Nhap 3 so a, b, c: ');readln(a,b,c);
if (a+b>c)and(a+c>b)and(b+c>a) then
begin
write('3 canh vua nhap la tam giac');
if (a=b)or(b=c)or(a=c) then
begin
if(a=b)and(b=c) then
write(' deu')
else
write(' can');
end;
if (a*a=b*b+c*c)or(b*b=a*a+c*c)or(c*c=a*a+b*b) then
write(' vuong');
end
else
write('3 canh vua nhap ko phai la tam giac');
readln;
end
4 BÀI TOÁN 4 .3 :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)
a,Hướng dẫn:
–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:= sqrt(p*(p-a)*(p-b)*(p-c));
b,Mã chương trình:
Program TAM_GIAC;
uses crt;
Var a,b,c,p,S: real;
Begin
clrscr;
Write(‘Nhap canh a:’);readln(a);
Trang 11Write(‘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
5.
BÀI TOÁN 5 .1 : Cho một dãy số n được nhập vào đầu một mảng gồm 100
phần tử(n<100) Hãy viết đoạn chương trình nhập dãy số vào mảng và các đoạn chường trình thực hiện các công việc tương ứng sau
- Nhập một số và thêm nó vào vị trí cuối của dãy số
- Nhập một số và chèn nó vào vị trí đầu tiên của dãy số(đẫy các phần tử về sau
một vị trí).
- Nhập một số và chèn nó vào vị trí k sao cho dãy con từ 1 đến k là dãy số không giảm
a, Ý tưởng : Dùng chương trình con và kiến thức toán học.
b , Mã chương trình:
Program sbt914;
USES CRT;
Var A:Array[1 100]Of integer;
i,n:integer;
{ -}
Procedure nds;
Begin
Write('Nhap so phan tu n= ');Readln(n);
While (n<=0)or(n>=100) do
Begin
Write('nhap n lai(n>0 and n<=100) =');Readln(n);
End;
For i:=1 to n do
begin
Write('nhap phan tu thu ',i,' la=');Readln(a[i]);
End;
End;
{ -}
Procedure chencuoi;
Var K:Integer;
Begin
Write('Nhap so can chen k= ');Readln(k);
A[n+1]:=k;
Writeln('Day vua chen cuoi la');
For i:=1 to n +1 do
Write(A[i]:3);writeln;
Trang 12{ -}
Procedure chendau;
Var k:integer;
Begin
Write('Nhap so can chen k= ');Readln(k);
For i:=n downto 1 do
a[i+1]:=a[i];
A[1]:=k;
Writeln('Day so vua chen dau la');
For i:=1 to n+1 do
Write(A[i]:3);Writeln;
End;
{ -}
Procedure chenbk;
Var K,j,tg:integer;
Begin
Write('Nhap so k can chen k='); Readln(k);
for i:=1 to n-1 do
For j:=i to n do
if a[i]>a[j] then
begin
tg:=a[i];
a[i]:=a[j];
a[j]:=tg;
End;
i:=1;
While (a[i]<k)and(i<=n) do
i:=i+1;
For j:=n downto i do
a[j+1]:=a[j];
A[i]:=k;
Writeln('Day so vua chen la');
For i:=1 to n+1 do
Write(a[i]:3);
End;
{ -}
Begin
nds;chencuoi;chendau;chenbk;
Readln;
End
5 BÀI TOÁN 5.2: Hãy viết chương trình Pascal thực hiện các công việc sau.
a.Nhập vào từ bàn phím một dãy số không quá 30 số nguyên
b.Kiểm tra rồi cho biết dãy số vừa nhập có phảI là một dãy số không giảm hay
Trang 13c, Đếm số lượng phần tử ở vị trí chẳn có giá trị là lẽ
5 BÀI TOÁN 5.3:
Cửa hàng mẹ tuấn co n mặt hàng (1<=n<=40) tên các mặt được biểu diễn bởi mảng sau đây
ten:array[1 40]of string;
đơn giá mặt hàng được biểu diễn bởi mảng sau đây
Don_gia:Array[1 40]of integer;
a, nhập tên và đơn giá của n mặt hàng từ bàn phím
b, tính và in ra màn hình đơn giá trinh bình của tất cả các mặt hàng
c, tìm và in ra màn hinh tên các mặt hàng có đơn giá không nhỏ hơn đơn giá trinh bình
6 BÀI TOÁN 6.1:
Cho tệp INPUT.INP, Dòng đầu tiên ghi số n, dòng tiếp theo ghi n số mỗi số cách nhau ít nhất một khoảng trắng
Lập trình thực hiện các công việc sau và ghi vào tệp OUPUT.OUT
a, Tìm UCLN của dãy số đó
b, sấp xếp dãy số đó tăng dần
c, In ra dãy số nguyên tố
8
17 3 5 11 9 18 23 7
UCLN cua dãy số đó la: 1 Day so tang dan
3 5 7 9 11 17 18 23 Day so nguyen to
3 5 7 11 17 23
Mã chương trình:
Program INSONGUYENTO;
Var A:Array[1 100]of Integer;
Var i,n,b:Integer;f1,f:Text;
{ -}
Function ngto(a:Integer):Boolean;
Var i:integer;
Begin
ngto:=False;
If a<2 then Exit;
For i:=2 to a div 2 do
if a mod i =0 then Exit;
ngto:=true;
End;
{ -}
Function UCLN(a,b:Integer):Integer;
Begin
While a<>b do
begin
Trang 14if a>b then a:=a-b
else b:=b-a;
End;
UCLN:=a;
End;
{ -}
Procedure Doctep;
Begin
Assign(f,'Input.inp');
Reset(f);
Readln(f,n);
For i:=1 to n do
Read(f,a[i]);
Close(f);
End;
{ -}
Procedure Cau_a`;
Var ucl:integer;
Begin
ucl:=a[1];
For i:=2 to n do
Ucl:=ucln(ucl,a[i]);
Assign(f1,'OUPUT.OUT');
ReWrite(f1);
Write(f1,'UCLN cua day so la:',ucl); Writeln(f1);
CLose(f1);
End;
{ -}
Procedure cau_b_c;
Var tg,j:integer;
Begin
For i:=1 to n-1 do
for j:=i+1 to n do
if a[i]>a[j] then
Begin
tg:=a[i];
a[i]:=a[j];
a[j]:=tg;
End;
Assign(f1,'ouput.out');
Append(f1);
Writeln(f1,'Day so tang dan la'); For i:=1 to n do
Write(f1,a[i]:4);