1. Trang chủ
  2. » Giáo Dục - Đào Tạo

SKKN xây dựng một số thuật toán cơ bản nhằm cải thiện kĩ năng lập trình tin học 11 cho học sinh ở một trường miền núi”

17 72 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 17
Dung lượng 357,5 KB

Nội dung

Lý do chọn đề tài Trong chương trình Tin học bậc THPT, các em lớp 11 được tìm hiểu với ngôn ngữ lập trình NNLT để trang bị cho các em những kiến thức, kỹ năng cơ bản về lập trình, biết v

Trang 1

MỤC LỤC

Trang

1 MỞ ĐẦU 2

1.1 Lý do chọn đề tài 2

1.2 Mục đích nghiên cứu: 2

1.3 Đối tượng và phạm vi áp dụng: 2

1.4 Phương pháp nghiên cứu: 2

2 NỘI DUNG SÁNG KIẾN KINH NGHIỆM 3

2.1 Cơ sở lý luận: 3

2.2 Thực trạng của vấn đề 3

2.3 Nội dung của giải pháp 3

2.3.1 Tìm hiểu về thuật toán của bài toán 3

2.3.1.2 Thuật toán 4

2.3.2 Cách thức viết chương trình đối với các dạng thuật toán 5

2.3.3.1 Thuật toán không phân nhánh 5

2.3.3.2 Thuật toán có phân nhánh 7

2.2.3.3 Thuật toán theo chu trình có bước lặp xác định 9

2.3.3.4 Thuật toán theo chu trình có bước lặp không xác định 10

2.4 Hiệu quả của giải pháp 13

2.4.1 Kết quả định tính 13

2.4.2 Kết quả định lượng 13

3 KẾT LUẬN 14

3.1 Kết luận 14

3.2 Kiến nghị 14

Trang 2

1 MỞ ĐẦU

1.1 Lý do chọn đề tài

Trong chương trình Tin học bậc THPT, các em lớp 11 được tìm hiểu với ngôn ngữ lập trình (NNLT) để trang bị cho các em những kiến thức, kỹ năng cơ bản về lập trình, biết vận dụng chúng để giải một số bài tập cơ bản hình thành những loại hình tư duy như tư duy thuật giải, tư duy điều khiển

Tuy nhiên, môn học có những khái niệm trừu tượng nên các em gặp nhiều khó khăn trong quá trình tiếp thu bài Bởi khi học phần lập trình đòi hỏi học sinh phải tư duy, mà khó khăn nhất đối với các em là bước “Lựa chọn và thiết kế thuật toán”

Khi nắm vững cách lựa chọn và thiết kế thuật toán, học sinh sẽ dễ dàng viết chương trình để giải bài toán trên máy tính bằng bất kỳ ngôn ngữ bậc cao nào

Từ đó, các em có hứng thú với bộ môn Tin học hơn

Hơn nữa, việc lựa chọn và thiết kế thuật toán để giải bài toán trên máy tính giúp rèn luyện cho học sinh khả năng tư duy, sáng tạo, biết phân tích và giải quyết tình huống Đây là những kỹ năng cần thiết để sau này các em hoà nhập vào thực tế cuộc sống

Xuất phát từ thực tiễn giảng dạy tại trường THPT Quan Hóa , nhằm giúp học sinh bước đầu hiểu rõ và tiếp cận với thuật toán giải bài toán để việc lập

trình đạt kết quả tốt hơn, tôi lựa chọn đề tài “ Xây dựng một số thuật toán cơ

bản nhằm cải thiện kĩ năng lập trình tin học 11 cho học sinh ở một trường miền núi”.

1.2 Mục đích nghiên cứu:

Giúp học sinh hiểu được thuật toán của các bài toán cơ bản Từ đó, các em

có thể hình thành tư duy lập trình cho các bài toán khác

1.3 Đối tượng và phạm vi áp dụng:

+ Đối tượng nghiên cứu:

Học sinh khối 11 ở các lớp trường THPT Quan Hoá, bộ môn Tin học để rèn luyện kỹ năng tư duy thuật toán từ đó nâng cao hiệu quả lập trình

+ Phạm vi nghiên cứu:

- Bài 3: Bài toán và thuật toán 10

- Bài tập chương II, III trong sách giáo khoa (SGK) Tin học 11

+ Nhiệm vụ của đề tài:

- Đảm bảo được tính chính xác của thuật toán trong các bài toán đưa ra

- Cách thức lựa chọn, diễn tả thuật toán, viết chương trình cho bài toán

1.4 Phương pháp nghiên cứu:

- Phương pháp nghiên cứu lí thuyết: Nghiên cứu tài liệu và các công trình

nghiên cứu đổi mới PPDH theo hướng tích cực hóa việc học của học sinh

- Phương pháp thực tập sư phạm: Thực nghiệm sư phạm ở trường THPT Quan Hóa, tiến hành theo quy trình của đề tài nghiên cứu khoa học giáo dục để đánh giá hiệu quả của đề tài nghiên cứu

- Phương pháp thống kê toán học: thống kê, đánh giá kết quả thu được.

Trang 3

2 NỘI DUNG SÁNG KIẾN KINH NGHIỆM

2.1 Cơ sở lý luận:

* Lịch sử nghiên cứu vấn đề:

- Khi các em đã xây dựng được thuật toán thì có thể sử dụng bất kỳ một ngôn ngữ bậc cao nào cũng sẽ viết được chương trình trên cơ sở đảm bảo tính tối ưu

* Cơ sở khoa học của giải pháp:

Là một người giáo viên giảng dạy bộ môn Tin học, tôi nhận thức được nhiệm vụ cơ bản của mình:

- Cung cấp cho học sinh kiến thức phổ thông cơ bản có hệ thống và toàn diện về môn Tin học

- Rèn luyện cho học sinh những kỹ năng chủ yếu sau:

+ Giải được một số bài toán đơn giản trên máy tính bằng cách vận dụng các kiến thức của thuật toán

+ Tư duy thuật toán, từ đó rèn luyện tư duy logic

+ Củng cố kiến thức các môn học như Toán, Lý

2.2 Thực trạng của vấn đề.

* Thuận lợi:

- Toàn ngành, toàn xã hội đang đề cao việc ứng dụng công nghệ thông tin vào tất cả các lĩnh vực ảnh hưởng tích cực theo đó các em học sinh có hứng thú hơn

- Môn Tin học là môn chính khoá trong trường phổ thông

- Các em học sinh thích được thực hành trên máy tính để nghiên cứu tìm tòi

* Khó khăn:

- Máy vi tính và các thiết bị hỗ trợ còn hạn chế ngoài thời gian thực hành tại trường đa phần các em chỉ học qua sách

- Phần lập trình hoàn toàn xa lạ với học sinh

- Chất lượng học sinh ở trường còn thấp không đồng đều ở các lớp

- Học sinh lớp 11 vẫn còn gặp khó khăn với đa phần học sinh của nhà trường trong việc xác định thuật toán để lập trình cho bài toán.do đó khi viết chương trình, sản phẩm thu được chưa đảm bảo tính tối ưu

2.3 Nội dung của giải pháp

2.3.1 Tìm hiểu về thuật toán của bài toán

2.3.1.1 Khái niệm bài toán

a Bài toán

Trong tin học, người ta quan niệm bài toán là một việc nào đó ta muốn máy tính thực hiện Những việc như đưa một dòng chữ ra màn hình, giải phương trình bậc hai, quản lý cán bộ của một cơ quan là những ví dụ về bài toán

Khi dùng máy tính giải toán, ta cần quan tâm đến hai yếu tố: Đưa vào máy thông tin gì (Input) và lấy ra thông tin gì (Output) Do đó để phát biểu một bài

Trang 4

toán, ta cần phải trình bày rõ Input và Output của bài toán và mối quan hệ giữa Input và Output

b Các bước để giải bài toán trên máy tính

Bước 1: Xác định bài toán: Xác định Input/Output và mối liên hệ giữa chúng

Bước 2: Lựa chọn hoặc xây dựng thuật toán: Thiết kế hoặc lựa chọn thuật toán đã có đề giải bài toán

Bước 3: Viết chương trình: Lựa chọn cách tổ chức dữ liệu và sử dụng NNLT để diễn tả đúng thuật toán

Bước 4: Hiệu chỉnh

Bước 5: Viết tài liệu

c Cấu trúc của chương trình sử dụng ngôn ngữ lập trình Pascal

Bao gồm 2 phần: [ <Phần khai báo>]

<Phần thân>

* Phần khai báo:

- Khai báo tên chương trình program <tên chương trình>;

- Khai báo thư viện Uses crt;

- Khai báo hằng const <tên hằng> = <giá trị>;

- Khai báo biến var <danh sách biến>: <kiểu dữ liệu>;

* Phần thân:

Begin

[<Dãy lệnh>];

End.

2.3.1.2 Thuật toán

* Khái niệm: Thuật toán để giải một bài toán là một dãy hữu hạn các thao

tác được sắp xếp theo một trình tự xác định sao cho sau khi thực hiện dãy thao tác ấy, từ Input của bài toán, ta nhận được Output cần tìm

* Tính chất của thuật toán

+ Tính tổng quát: thuật toán không chỉ đề cập một bài toán riêng lẻ mà bao

hàm một lớp bài toán cùng kiểu

+ Tính dừng: Thuật toán phải kết thúc sau một số hữu hạn lần thực hiện các thao tác

+ Tính xác định: Sau khi thực hiện một thao tác thì hoặc là thuật toán kết thúc hoặc là có đúng một thao tác xác định để được thực hiện tiếp theo

+ Tính đúng đắn: sau khi thuật toán kết thúc ta phải nhận được Output cần tìm

* Thuật toán có thể phân loại như sau:

- Thuật toán không phân nhánh

- Thuật toán có phân nhánh

- Thuật toán theo chu trình có bước lặp xác định và có bước lặp không xác định

* Có 2 cách thể hiện thuật toán:

+ Liệt kê: Thể hiện thuật toán thông qua các bước.

+ Sơ đồ khối: Sử dụng các kí hiệu để thể hiện

Trang 5

Các kí hiệu để diễn tả thuật toán bằng sơ đồ khối.

Quy định trình tự thực hiện các phép toán

Thể hiện các thao tác nhập, xuất dữ liệu

Thể hiện thao tác so sánh

* Lưu ý:

- Với hình ô van thì chỉ có một hướng mũi tên đi ra cho trường hợp thao tác nhập dữ liệu và chỉ có một hướng đi vào cho thao tác xuất dữ liệu

- Với hình chữ nhật thì có một hướng mũi tên vào và một hướng mũi tên ra

- Với hình thoi thì có một hướng mũi tên vào và hai hướng mũi tên ra

2.3.2 Cách thức viết chương trình đối với các dạng thuật toán

* Thuật toán không phân nhánh: đây là dạng thuật toán đơn giản, sau khi học sinh xác định bài toán, vận dụng các kiến thức liên quan, sử dụng một số hàm học chuẩn đã học để giải quyết bài toán

* Thuật toán có phân nhánh: sử dụng câu lệnh if then để viết chương trình

Cấu trúc của câu lệnh rẽ nhánh if then:

+ Dạng thiếu: if <điều kiện> then <câu lệnh>;

+ Dạng đủ: if <điều kiện> then <câu lệnh 1> else<câu lệnh 2>;

* Thuật toán theo chu trình có bước lặp xác định và có bước lặp không xác định

- Thuật toán theo chu trình có bước lặp xác định:

Cấu trúc câu lệnh lặp For-do:

+ Dạng lặp tiến: for <biến đếm>:= <giá trị đầu> to <giá trị cuối> do

<câu lệnh>;

+ Dạng lặp lùi: for <biến đếm>:=<giá trị cuối> downto <giá trị đầu>

do <câu lệnh>;

Kết hợp với câu lệnh if then để giải quyết bài toán

- Thuật toán theo chu trình có bước lặp không xác định

Cấu trúc câu lệnh lặp While-do:

+ While <điều kiên> do <câu lệnh>;

2.3.3 Một số dạng toán

2.3.3.1 Thuật toán không phân nhánh

Bài toán:

Nhập từ bàn phím độ dài 3 cạnh của tam giác ABC, rồi tính chu vi, diện tích và các đường cao của tam giác

* Xác định bài toán:

Trang 6

- Input: độ dài 3 cạnh a,b,c

- Output: chuvi, dientich, các đường cao ha, hb, hc

* Thuật toán:

Bước 1: nhập độ dài 3 cạnh a,b,c;

Bước 2:

P(a+b+c)/2;

s  p(p-a)(p-b)(p-c);

ha2a s ; , hb 2b s ; hc2c s ;

Bước 3: Đưa ra màn hình chuvi p, dientich s, các đường cao ha, hb, hc

* Chương trình:

Program tinhdt_cv_duongcao;

Var a,b,c,p,s, h1, h2, h3: real;

Begin

Writeln (‘ nhap do dai 3 canh:’);

Readln (a,b,c);

P:=(a+b+c)/2;

S:=sqrt(p*(p-a)*(p-b)*(p-c));

h1:=2*s/a; ; h2:= 2*s/b; h3:=2*s/c;

Writeln(‘chu vi dien tich chieu cao’, p:5:2,s:5:2,h1:5:2,h2:5:2,h3:5:2); Readln

End.

Bài tập áp dụng:

Bài 1: Nhập từ bàn phím toạ độ 3 điểm A,B,C Tính tích vô hướng của hai

vectơ ABAC

Hướng dẫn:

- Input: Toạ độ 3 điểm A, B và C;

- Output: Tích vô hướng AB AC ;

- Sử dụng các công thức: AB=(x -x ;y -y )  B A B A

; AC=(x -x ;y -y ) C A C A ;

Tích vô hướng: AB.AC=(x -x ).(x -x )+(y -y ).(y -y )   B A C A B A C A

;

Bài 2:

Nhập từ bàn phím toạ độ 3 điểm A,B,C Tính độ dài các đoạn thẳng AB,

AC và BC

Hướng dẫn:

- Input: Toạ độ 3 điểm A, B và C;

- Output: Độ dài các đoạn thẳng AB,AC và BC

AB = (x -x ) +(y -y ) 

;

Từ các bài tập trên giáo viên hướng dẫn học làm các bài tập trong SGK chương

Bài tâp 9 SGK_tr36:

* Xác định bài toán:

- Input: cạnh a (a>0)

a

x

y

Trang 7

- Output: Diện tích gạch chéo

* Thuật toán:

Sơ đồ khối

* Ch ương trình

Program Dtgachcheo;

Const pi=3.14;

Var a,s:real;

Begin

Writeln(‘nhap canh a:’);

Readln(a);

S:=pi*sqr(a);

Writeln (‘ dien tich phan gach cheo la:’,s:8:4);

Readln;

End

Bài tập 10 SGK_tr36: Tính và đưa ra màn hình vận tốc v khi chạm đất của một

vật rơi từ độ cao h biết rằng v= 2gh trong đó g =9.8m/s2, độ cao h nhập từ bàn phím

*Xác định bài toán:

+ Input: h

+ Output: v

* Thuật toán

Bước 1: Nhập h

Bước 2: v  sqrt(2*9.8*h)

Bước 3: thông báo v và kết thúc

Sơ đồ khối

Chương trình

Program tinhvantoc;

const g=9.8;

var v,h:real;

Begin writeln( ‘nhao do cao h:’);

readln(h);

v:=sqrt(2*g*h);

writeln(‘van toc la:’,v:6:3);

readln;

End

2.3.3.2 Thuật toán có phân nhánh

Sơ đồ:

Dạng thiếu

Sai

Đúng Điều

kiện Câu lệnh

Nhập a

s  pi*sqr(a)/2

Thông báo s rồi kết thúc

Nhập h

v 

Thông báo v rồi kết thúc

Trang 8

Dạng đủ

Chú ý:

- Ta có thể sử dụng cấu trúc rẽ nhánh lồng nhau

VD: Viết chương trình giải phương trình bậc hai ax2+bx+c=0

* Xác định bài toán

- Input: a,b,c (a<>0)

- Output: Nghiệm x thoả phương trình ax2+bx+c=0

Liệt kê: Bước 1: Nhập a,b,c (a<>0);

Bước 2: Tính Db*b-4*a*c;

Bước 3: Nếu D<0 thì PTVN rồi kết thúc;

Bước 4: Nếu D>0 thì PT có nghiệm x1(-b+sqrt(D))/(2*a)

X2(-b-sqrt(D))/(2*a) rồi kết thúc;

Bước 5: Nếu D= 0 thì PT có nghiệm kép x-b/(2*a) rồi kết thúc;

Bước 6: Kết thúc.

Sơ đồ khối

S

Đ S

Đ

Nhập a,b,c (a<>0)

Db*b- 4*a*c

D<0 Thông báo PT vô

nghiệm rồi

kết thúc

D=0

Thông báo PT

có nghiệm kép

x rồi kết thúc

x-b/

(2*a)

X1(-b+sqrt(D))/(2*a)

X2(-b-sqrt(D))/(2*a)

Thông báo PT

có 2 nghiệm x 1

và x 2 rồi kết thúc

Sai Điều Đúng

1 Câu lệnh

2

Trang 9

Chương trình:

Uses Crt;

Var a , b, c : real;

d, x1, x2 : real;

Begin

Clrscr;

Write (‘a, b, c: ’);

Readln (a, b, c) ;

D: = b * b – 4 * a * c ;

if D < 0 then Writeln (‘Phuong trinh vo nghiem’)

Else

Begin x1 = ( - b – sqrt (D))/(2 * a); x1 = ( - b + sqrt (D))/(2 * a); Witeln ( ‘x1 =’, x1 : 8:3 , ‘x2 = ’ , x2 : 8:3);

End;

Readln

End

Bài tập áp dụng:

Bài 1: Nhập dữ liệu là tháng trong năm

Hướng dẫn

- Tháng trong năm phải từ 1 đến 12

- Nếu thoả mãn thì thông báo là tháng, ngược lại thì thông báo không phải

là tháng trong năm

Bài 2: Nhập vào một năm cho ra số ngày của năm đó

Hướng dẫn

- Kết quả là 365 ngày hoặc 366 ngày

- Năm nhuận là 366 ngày, không nhuận là 365 ngày

- Năm nhuận là năm chia hết cho 400 hoặc chia hết cho 4 nhưng không chia hết cho 100

Bài 3: Giải bất phương trình ax+b> 0

Hướng dẫn

- Sử dụng thuật toán như các bài đã gặp

Hướng dẫn

- Sử dụng If lồng nhau

2.2.3.3 Thuật toán theo chu trình có bước lặp xác định.

Sơ đồ:

Bài toán: Tính giai thừa của một số nguyên dương n (n!=1.2 (n-1).n) Xác định bài toán + Input: Số nguyên dương n;

+ Output: Giai thừa của n (GT)

Sai Đúng

Điều kiện

Câu lệnh

Trang 10

Sơ đồ khối

Chương trình:

Program tinhgiaithua

Var i,n,gt: integer;

Begin

Writeln(‘ nhap n:’);

Readln(n);

For :=1 to n do gt:=gt*i;

Writeln(‘giai thua cua n la:’,gt);

Readln

End

Bài tập áp dụng:

Bài 1: Tính tổng

S= 1 + 2 + 3 + ……… + n

với n nhập từ bàn phím

Bài 2: Tính tổng

với n nhập từ bàn phím

Giáo viên yêu cầu học sinh áp dụng làm các bài tâp trong SGK

Bài tập 5a SGK_ tr51: Lập trình tính Y=

50

n

n n

Thuật toán

Liệt kê:

Bước 1: i1; s0;

Bước 2: Nếu i>50 thì sang bước 4;

Bước 3:

ss+i/(i+1);

ii+1;

quay lại bước 2;

Bước 4: Thông báo s và kết thúc

Bài tập 6/SGK tr51: tương tự

2.3.3.4 Thuật toán theo chu trình có bước lặp không xác định.

Sơ đồ:

Đ

S

Nhập n

GT1

i1

GTGT*i

ii+1

i  n

Thông báo GT rồi kết thúc

Sai

Đúng

Điều kiện

Câu lệnh

Trang 11

Bài toán: Tìm ước số chung lớn nhất của hai số nguyên dương a và b

* Xác định bài toán

+ Input: Số nguyên dương a,b;

+ Output: UCLN(a,b)

Thuật toán:

Bước 1: Nhập a,b;

Bước 2: Nếu a=b thì lấy giá trị chung này làm UCLN rồi kết thúc;

Bước 3: Nếu a>b thì aa – b rồi quay lại bước 2;

Bước 4: bb – a rồi quay lại bước 2;

Bước 5: Đưa ra kết quả UCLN rồ kết thúc

Chương trình;

Program UCLN;

Var a,b,ucln:integer;

Begin

Writeln(‘nhap a,b’);

Readln(a,b);

While a<>b do

If a>b then a:=a-b else b:= b-a;

If a=b then ucln:=a;

Writeln(‘ uoc chung lon nhat la: ‘, ucln);

Readln;

End

Bài tập áp dụng:

Bài tập 7 SGK/tr51 :

Nhập từ bàn phím tuổi của cha và con (hiện tại tuổi cha lớn hơn hai lần tuổi con và tuổi cha hơn tuổi con ít nhất là 25 ) Đưa ra màn hình câu trả lời cho câu hỏi “Bao nhiêu năm nữa thì tuổi cha gấp đôi tuổi con ?

*Xác định bài toán :

Input: nhập tuổi cha, tuổi con;

Output: số năm tuổi cha gấp đôi tuổi con

* Thuật toán:

Bước 1: nhập tuoicha, tuoicon (điều kiện tuoicha >2*tuoicon và tuoicha-tuoicon>=25)

Bước 2: nam0;

Bước 3: nếu tuoicha= 2*tuoicon thì đến bước 5;

Bước 4: tuoichatuoicha+1;

tuoicontuoicon + 1;

namnam+1;

Bước 5: thông báo số năm và kết thúc

*Chương trình

Var Tuoicha, tuoicon, nam : word;

Begin

Writeln (‘ nhap tuoi cha va con’);

Đ

S

bb-a

ĐƯA KQ UCLN(a,b )=a KẾT THÚC

Nhập a,b

a=b

aa-b a>b

Đ

S

Ngày đăng: 21/11/2019, 08:50

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w