- Phương pháp Heun:
- Phương pháp Rungle – Kutta:
Tóm lại, để giải quyết các bài toán trên một cách đơn giản đòi hỏi có sự hỗ trợ của kĩ thuật tin học, bởi lẽ việc sắp xếp dữ liệu, tính toán hiệu quả là vấn đề quan trọng. Cho nên, việc phân tích lập trình để ra quyết định ngôn ngữ, cấu trúc ngữ pháp, câu lệnh,… phụ thuộc nhiều vào việc vận dụng tư duy để ra quyết định. Việc đánh giá chương trình, đánh giá thuật toán,… phụ thuộc vào tình huống. Từ đó, máy tính muốn làm việc hiệu quả thì giải pháp chọn lựa nội dung kiến thức dạy học, việc phân tích nội dung, phân tích kĩ thuật ngôn ngữ lập trình rất quan trọng, cũng như góp phần quan trọng trong việc rèn tư duy điện toán cho SV và tăng hiệu quả rất nhiều cho các giải pháp tiếp theo.
2.2.2 Biện pháp 2: Hướng dẫn SV phân rã hoạt động lập trình thành những hoạt động thành phần, phân chia vấn đề phức tạp thành đơn giản hơn theo trình tự xác định.
a. Cơ sở đề xuất biện pháp 2:
Có thể bạn quan tâm!
- Đặc Điểm Nội Dung Môn Học Kĩ Thuật Lập Trình
- Dạy học kĩ thuật lập trình cho sinh viên ngành Kĩ thuật điện tử - viễn thông theo hướng phát triển tư duy điện toán - 12
- Dạy học kĩ thuật lập trình cho sinh viên ngành Kĩ thuật điện tử - viễn thông theo hướng phát triển tư duy điện toán - 13
- Biện Pháp 3: Hình Thành Thói Quen Khái Quát Hóa Bài Toán, Kiểm Tra, Đánh Giá Các Chương Trình Kết Quả Và Xây Dựng Chương Trình Với Nhiều Thuật Toán Khác
- Tiến Trình Dạy Học Cho Việc Tiếp Cận Cấu Trúc Cụ Thể Của Ngôn Ngữ Lập Trình
- Phát Triển Biểu Hiện Của Tư Duy Điện Toán
Xem toàn bộ 235 trang tài liệu này.
Trên cơ sở hệ thống các nguyên tắc dạy học theo hướng phát triển tư duy điện toán được nêu ra ở trên và đặc điểm của môn Kĩ thuật lập trình, và
với quan điểm dạy học phát triển tư duy chính là việc rèn luyện cho SV thực hiện tốt các hoạt động tư duy thành phần.
Để kích thích tư duy cho SV phát triển tư duy điện toán trong quá trình dạy học kĩ thuật lập trình thì thường diễn ra những hoạt động dạy học chiếm lĩnh tri thức lập trình và rèn luyện kỹ năng sử dụng thành thạo các cấu trúc câu lệnh trong ngôn ngữ lập trình bất kỳ. Những hoạt động cụ thể như GV giúp học sinh kích thích nhu cầu nhận thức tri thức lập trình khi chuẩn bị học cấu trúc của ngôn ngữ lập trình; hoặc hoạt động nhận dạng bài toán và nhận dạng thuật toán sử dụng cấu trúc lệnh nào khi chuẩn bị lập trình,… Trong quá trình hoạt động, GV tách biệt hóa các hoạt động cụ thể trong từng tình huống khác nhau.
Khi lập trình, công đoạn quan trọng là xây dựng thuật toán, từ đó mã hóa thành chương trình theo một ngôn ngữ lập trình cụ thể nào đó. Trong quá trình dạy học, GV cần đặc biệt quan tâm truyền thụ cho SV những tri thức phương pháp về tư duy thiết kế thuật toán trong khi tổ chức, điều khiển tập luyện hoạt động thông qua dạy học cấu trúc trong ngôn ngữ lập trình. Quá trình xây dựng một thuật toán cũng là quá trình giải một bài toán (một vấn đề) chưa có thuật toán. Vì vậy, biện pháp hướng dẫn SV phân chia vấn đề phức tạp thành đơn giản hơn theo trình tự xác định sẽ giúp cho GV hướng dẫn cho SV giải quyết bài toán (vấn đề) theo một các bước xác định.
b. Mục đích của biện pháp 2:
Biện pháp này giúp cho SV ngành KTĐT-VT hình thành thói quen tư duy phân rã hoạt động của câu lệnh, chương trình. Từ đó, mới hiểu được bản chất và từng bước hoạt động của câu lệnh để viết chương trình hiệu quả hơn, giúp phát hiện lỗi và kiểm soát lỗi lập trình nhanh hơn.
Biện pháp này giúp cho SV ngành KTĐT-VT biết phân chia một bài toán (hoặc một vấn đề) thành nhiều bài toán nhỏ đơn giản hơn (hoặc những
việc đơn giản hơn), từ đó giải quyết các bài toán đơn giản (công việc đơn giản) theo từng bước và tuân theo một trình tự nhất định để hoàn thiện nó.
Biện pháp này nhằm hình thành và phát triển yếu tố đầu tiên của tư duy điện toán: “Phân rã vấn đề”; yếu tố thứ hai của tư duy điện toán: “Nhận dạng mẫu” và yếu tố thứ ba của tư duy điện toán: “Thiết kế thuật toán”, đồng thời phát triển kỹ năng “Sử dụng ngôn ngữ để mô tả các quy tắc gồm một số hữu hạn bước sắp xếp theo một thứ tự nhất định” của tư duy thuật toán.
c. Cách thức thực hiện biện pháp 2:
Trong khi giải quyết vấn đề sẽ có nhiều hoạt động khác nhau thường liên quan mật thiết với nhau, hoặc xuất hiện xen kẽ nhau, lồng vào nhau. Mỗi hoạt động này tương ứng như một thành phần của một hoạt động khác. Trong quá trình dạy Kĩ thuật lập trình, để giúp SV hiểu được công dụng, cú pháp và hoạt động của câu lệnh, cách viết một chương trình, GV phân tích câu lệnh, phân rã chương trình thành những hoạt động thành phần đơn giản sao cho SV dễ tiếp nhận và hiểu được từng hoạt động và cách sử dụng câu lệnh trong chương trình.
Phân tách hoạt động là hoạt động sử dụng trí óc chia tổng thể ra từng phần, hoặc tách rõ từng thao tác, từng khía cạnh riêng biệt. Trong dạy học Kĩ thuật lập trình, trong đó có tri thức lập trình, khâu phân tách hoạt động là khâu quan trọng và cần thiết. Phân tách hoạt động và thực hiện các hoạt động thành phần là một yếu tố rất cần thiết đối với một người lập trình, phát triển được khả năng này cho SV không chỉ giúp SV giải quyết các bài toán đơn giản mà còn là hành trang giúp SV tiến xa hơn nữa trong lĩnh vực lập trình.
Có thể thực hiện biện pháp này theo các cách thức sau:
- Phân tách từng thành phần cụ thể trong cú pháp của một cấu trúc điều khiển lệnh bất kỳ khi học về cấu trúc lệnh.
- Tiến hành vẽ lưu đồ hoạt động của một chương trình hay một cấu trúc lệnh bất kỳ.
Ví dụ minh họa thứ nhất trong biện pháp 2:
Khi dạy nội dung về cấu trúc lựa chọn (sử dụng ngôn ngữ lập trình C++ để minh họa), GV giới thiệu và phân tích cấu trúc cho SV có thể theo các hoạt động như sau:
- Hoạt động 1: Nêu ra dạng tổng quát cấu trúc if có cú pháp:
if (E) S1 ;
[else S2 ;]
- Hoạt động 2: Phân tích từng thành phần trong cấu trúc lệnh:
+ if, else : Từ khóa trong ngôn ngữ lập trình
+ E : Biểu thức điều kiện, biểu thức logic
+ S1, S2 : Câu lệnh / Khối lệnh bất kỳ
+ Mệnh đề ELSE là tùy chọn, có thể có hoặc không có trong cấu trúc.
- Hoạt động 3: Phân tích ý nghĩa của cấu trúc:
Cấu trúc if được sử dụng khi muốn thực hiện câu lệnh, hoặc khối lệnh khi điều kiện nào đó thỏa mãn.
- Hoạt động 4: Phân tích nguyên tắc hoạt động của cấu trúc if:
+ Nếu biểu thức điều kiện E có giá trị đúng thì câu lệnh hoặc khối lệnh S1 sẽ được thực hiện.
+ Ngược lại,
- Nếu biểu thức điều kiện E có giá trị sai thì câu lệnh hoặc khối lệnh S2 sẽ được thực hiện nếu có mệnh đề ELSE trong cấu trúc.
- Nếu không có mệnh đề ELSE trong cấu trúc thì khi biểu thức điều kiện E có giá trị sai, sẽ không thực hiện gì và thoát khỏi cấu trúc.
Để SV có thể hiểu rõ hơn hoạt động của cấu trúc lệnh này, GV nên sử dụng các vẽ lưu đồ hoạt động của cấu trúc câu lệnh if nhằm phát triển khả năng tường minh hóa cấu trúc cho SV như sau (Hình 2.1):
(a) (b)
Hình 2.2. Lưu đồ hoạt động cấu trúc lệnh if (a) có mệnh đề else và (b) không có mệnh đề else
- Hoạt động 5: Cho ví dụ minh họa để giải thích rõ hơn về hoạt động của cấu trúc điệu kiện if.
Chẳng hạn, viết đoạn mã chương trình in ra màn hình số lớn nhất của ba số nguyên a, b, c (giá trị ba biến a, b, c được nhập từ bàn phím).
+ Minh họa với cấu trúc lệnh if có mệnh đề else:
max = a ;
if (max < b)
if (max < c)
max = c ; else max = b ;
else
if (max < c)
max = c ;
cout << “Max = ” << max ;
+ Minh họa với cấu trúc lệnh if không có mệnh đề else:
max = a ;
if (max < b)
max = b ; if (max < c)
max = c ;
cout << “Max = ” << max ;
Qua cách phân rã từng hoạt động dạy học cụ thể khi dạy về kiến thức của cấu trúc điều khiển trong một ngôn ngữ lập trình nào đó, GV sẽ giúp cho SV có thể nắm bắt được kiến thức, hiểu được bản chất và nguyên lý hoạt động của cấu trúc lệnh. Từ đó, hiểu hơn cách sử dụng cũng như là ý nghĩa của cấu trúc này, vận dụng phù hợp vào từng tình huống thuật toán khi viết một chương trình bất kỳ để thực hiện một yêu cầu nào đó của bài toán.
Trong quá trình dạy cấu trúc lập trình, để rèn luyện SV khả năng thực hiện một thuật toán, sử dụng cấu trúc lập trình phù hợp với bài toán, GV cần đưa ra các lược đồ hoặc các mô hình tính toán hoặc các chương trình đơn giản nhất có thể, sau đó để kiểm tra mức độ hiểu và vận dụng của SV, GV có thể cho SV thực hiện từng bước “chạy tay” trên giấy (không sử dụng máy tính).
Hơn nữa, trong quá trình dạy Kĩ thuật lập trình, sẽ có nhiều bài tập phức tạp được chia nhỏ thành các bài toán đơn giản hơn. Khi lựa chọn dạng bài tập đưa vào bài giảng, GV cần quan tâm đến việc phát hiện các bài toán “con” từ bài tập đó chứ không phải chỉ nhằm mục đích đạt được một lời giải. Từ bài toán ban đầu phân chia nhỏ thành nhiều bài toán đơn giản hơn và thực hiện cách giải theo một trình tự nhất định sẽ giúp việc tính toán dễ dàng hơn.
Ví dụ minh họa thứ hai trong biện pháp 2:
Khi hướng dẫn SV làm bài tập “Viết chương trình nhập vào một mảng số nguyên A gồm n số (0 < n <= 20). Sau đó, sắp xếp dãy số A tăng dần rồi in dãy A đã được sắp xếp ra màn hình”.
Ở đây, ta có thể chia bài toán này thành các công việc sau:
- Nhập số n sao cho 0 < n <= 20.
- Nhập mảng số nguyên A với n phần tử.
- Sắp xếp mảng A tăng dần.
+ Đổi chỗ phần tử trong mảng.
+ Sắp xếp mảng theo một thuật toán bất kỳ.
- In mảng A đã sắp xếp ra màn hình.
Với mỗi công việc trên ta có thể xây dựng thành các thủ tục độc lập nhau. Sau đó, trong chương trình chính ta chỉ cần gọi tên các thủ tục này theo thứ tự công việc cần làm trong chương trình với các tham số thích hợp.
Trong thuật toán sắp xếp có một việc phải làm nhiều lần đó là đổi chỗ hai phần tử trong mảng. Do vậy, ta nên lập một thủ tục Doicho để sử dụng như chương trình con trong thủ tục sắp xếp.
Khi đó, chương trình có thể được viết như sau:
int A[20] ; byte n ; void Nhap_N( byte *n ) ;
void Nhap_mang ( int *P , byte n ) ; void SX_tang ( int *P , byte n ) ; void In_mang ( int P , byte n ) ;
int main(void)
{ int A[20] ; byte n ;
Nhap_n ( n ) ; {Nhập số phần tử n} Nhap_mang (A, n) ; {Nhập giá trị cho mảng A} printf("n Mang truoc khi sap xep tang");
In_mang ( A , n ) ;
SX_tang ( A , n ) ;
printf("n Mang sau khi sap xep tang");
In_mang ( A , n ) ;
}
void Nhap_N( byte *n )
{ do
{ print("Nhap n =") ;