Sáng kiến kinh nghiệm Bài tập kiểu xâu
Turbo Pascal là ngôn ngữ lập trình có cấu trúc, nó được dùng phổ biến ở nước ta hiện nay trong công tác giảng dạy, lập trình tính toán, đồ họa. Turbo Pascal được dùng trong chương trình giảng dạy Tin học ở hầu hết các trường đại học, cao đẳng, trung học phổ thông và nó được mệnh danh là “ngôn ngữ học đường”.
Các em học sinh phải làm quen với nhiều kiểu dữ liệu mới mà trong các môn học khác không có, nhiều học sinh còn bỡ ngỡ không hiểu vì sao cùng là kiểu số nguyên mà lại chia làm nhiều kiểu như byte, integer, word, … mà trong toán học chỉ gồm số nguyên âm và nguyên dương. Hoặc các loại thông tin như hình ảnh, âm thanh… được xử lý như thế nào. Kiến thức mới và khó, học sinh sợ học môn Tin học 11, kết quả giảng dậy thấp, nhất là ở các lớp học sinh yếu về môn tự nhiên, ít có điều kiện sử dụng máy tính. Người thầy phải làm gì để khắc phục được điều này?
Để khắc phục được điều đó, theo tôi chúng ta cần phải tìm tòi, nghiên cứu tìm ra những bài toán phù hợp, kích thích được sự độc lập, tích cực của học sinh trong học tập. Học sinh có thể tự mình tìm ra được những ý tưởng sáng tạo vận dụng thiết thực vào cuộc sống thực tế khi nhu cầu nảy sinh, khi đó các em có thể tự mình hoàn thành được ý tưởng đó.
Trên cơ sở những gì mà học sinh được học tập về môn lập trình Pascal, để giúp cho học sinh nhìn nhận vấn đề một cách tích cực hơn, sáng tạo hơn và nhất là giúp cho các em có thể yêu thích nhiều hơn nữa ngôn ngữ lập trình Pascal.
giúp các em nắm được kiểu dữ liệu cú cấu trỳc - kiểu xâu và ứng dụng của kiểu dữ liệu này trong thực tiễn (Chương IV, bài 12, tin học 11).
Tóm tắt nội dung tài liệu: Sáng kiến kinh nghiệm Bài tập kiểu xâu

tìm hiểu, lĩnh hội kiến thức”. - Xuất phát từ thực tiễn giảng dạy tại trường THPT Lương Tài tôi thấy rằng, để đạt hiệu quả cao trong mỗi phần học, tiết học cần có cách thiết kế bài giảng cho phù hợp với nội dung kiến thức; phương pháp, phương tiện dạy học phải phù hợp với từng đối tượng học sinh. Để qua mỗi phần học, tiết học học sinh thích thú với kiến thức mới, qua đó hiểu được kiến thức đã học trên lớp, đồng thời học sinh thấy được tầm quan trọng của vấn đề và việc ứng dụng của kiến thức trước hết để đáp ứng những yêu cầu của môn học, sau đó là việc ứng dụng của nó vào các công việc thực tiển trong đời sống xã hội (nếu có). 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 đó người lập trình có thể chọn một ngôn ngữ lập trình thích hợp. 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 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ự độngQuá đó 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. Đồng thời Pascal là một ngôn ngữ có cấu trúc thể hiện trên 3 yếu tố: Cấu trúc về mặt dữ liệu, cấu trúc về mặt lệnh, cấu trúc về mặt chương trình. Tuy nhiên, trong các môn học ở bậc học THPT thì môn Tin học lớp 11 được các em học sinh cho là môn học “khó nhai” nhất trong các môn học. Từ việc các em chỉ là người sử dụng các phần mềm sẵn có như: hệ điều hành, sọan thảo văn bản Word, bảng tính Excel, các phần mềm học tập, nghe nhạc hay chơi game thì các em lại là người phải tìm ra lời giải cho các bài toán, chỉ ra các bước cho máy tính thực hiện và viết chương trình để tạo ra các sản phẩm phần mềm cho người khác sử dụng mặc dù mới chỉ là bước khởi đầu, cơ bản. Turbo Pascal là ngôn ngữ lập trình có cấu trúc, nó được dùng phổ biến ở nước ta hiện nay trong công tác giảng dạy, lập trình tính toán, đồ họa. Turbo Pascal được dùng trong chương trình giảng dạy Tin học ở hầu hết các trường đại học, cao đẳng, trung học phổ thông và nó được mệnh danh là “ngôn ngữ học đường”. Các em học sinh phải làm quen với nhiều kiểu dữ liệu mới mà trong các môn học khác không có, nhiều học sinh còn bỡ ngỡ không hiểu vì sao cùng là kiểu số nguyên mà lại chia làm nhiều kiểu như byte, integer, word, mà trong toán học chỉ gồm số nguyên âm và nguyên dương. Hoặc các loại thông tin như hình ảnh, âm thanh được xử lý như thế nào. Kiến thức mới và khó, học sinh sợ học môn Tin học 11, kết quả giảng dậy thấp, nhất là ở các lớp học sinh yếu về môn tự nhiên, ít có điều kiện sử dụng máy tính. Người thầy phải làm gì để khắc phục được điều này? Để khắc phục được điều đó, theo tôi chúng ta cần phải tìm tòi, nghiên cứu tìm ra những bài toán phù hợp, kích thích được sự độc lập, tích cực của học sinh trong học tập. Học sinh có thể tự mình tìm ra được những ý tưởng sáng tạo vận dụng thiết thực vào cuộc sống thực tế khi nhu cầu nảy sinh, khi đó các em có thể tự mình hoàn thành được ý tưởng đó. Trên cơ sở những gì mà học sinh được học tập về môn lập trình Pascal, để giúp cho học sinh nhìn nhận vấn đề một cách tích cực hơn, sáng tạo hơn và nhất là giúp cho các em có thể yêu thích nhiều hơn nữa ngôn ngữ lập trình Pascal. Xuất phát từ cơ sở trên, tôi đã chọn đề tài “Bài tập kiểu xâu”, giúp các em nắm được kiểu dữ liệu cú cấu trỳc - kiểu xâu và ứng dụng của kiểu dữ liệu này trong thực tiễn (Chương IV, bài 12, tin học 11). II. Mục đích của sáng kiến kinh nghiệm. Sử dụng các ví dụ cụ thể trước hết để học sinh nắm được cú pháp, ý nghĩa của kiÓu x©u. Và thông qua các ví dụ đó kÕt hîp víi bµi tËp vµ thùc hµnh sè 6 (giới thiệu trước 2 thủ tục) ®Ó cñng cè vÒ phÇn kiÕn thøc nµy, ®ång thêi t¨ng sù yªu thÝch, ham häc hái cña häc sinh ®èi víi m«n häc vèn ®îc mÖnh danh lµ khã nhÊt trong c¸c m«n häc ë líp 11. III. Nhiệm vụ của sáng kiến kinh nghiệm . Đưa ra 1 số bài tập để học sinh thảo luận qua đó nắm vững được kiểu dữ liệu có cấu trúc: kiểu xâu. Và hình thành ở học sinh kỹ năng phân tích, sử lý các vấn đề liên quan đến bài tập kiểu xâu, sử dụng thành thạo vòng lặp biết trước, thủ tục chuẩn vào/ra đơn giản bước đầu làm quen với 1 số chương trình con dạng thủ tục tạo điều kiện thuận lợi cho việc tiếp thu kiến thức về cách viết chương trình có cấu trúc. IV. Đối tượng nghiên cứu. Học sinh khối 11 tại trường THPT L¬ng Tµi – B¾c Ninh Sử dụng máy tính có máy chiếu kết nối để chạy các chương trình về kiểu xâu V. Phương pháp nghiên cứu. - Kết hợp thực tiễn giáo dục ở trường THPT L ương T ài . - Có tham khảo các tài liệu về ngôn ngữ lập trình Pascal và tài liệu về sáng kiến kinh nghiệm. B. NỘI DUNG I .Cơ sở lí luận Khi học sinh học bài học Bài 12 “Kiểu xâu”, học sinh đã có rất nhiều khó khăn, nhầm lẫn trong việc xử lý dữ liệu vì các em đang quen với các bài toán xử lý dữ liệu kiểu số, các bài toán quen thuộc như tính tổng hoặc tích của 1 dãy số thoả mãn điều kiện nào đó - Ở bài kiểu xâu giáo viên có thể tạo sự hứng thú cho học sinh bằng các ví dụ cụ thể, có thể làm được các công việc mà các em đã gặp trong thực tế cuộc sống như các biển hiệu quảng cáo, chế độ nghỉ màn hình, ... II. Nội dung và giải pháp thực hiện . 1. Nội dung. Bài tập 1: Viết chương trình nhập vào một xâu ký tự từ bàn phím. Đổi xâu ký tự đó sang chữ in hoa rồi in kết quả ra màn hình. Ví dụ : Input: ‘abcdAbcD’ Output: ‘ABCDABCD’ GV nêu câu hỏi: Ứng dụng của viết chữ in hoa các em gặp trong những trường hợp nào? HS: khi đi làm giấy khai sinh, kê khai lý lịch, làm hồ sơ thi tốt nghiệp, ĐH-CĐ GV: Làm thế nào để khi ta nhập họ tên vào máy là chữ thường thì khi hiện lên trên màn hình là chữ in hoa có dấu? HS; sử dụng hàm upcase(ch) GV: Nhưng hàm upcase(ch) chỉ đổi được 1 kí tự thành ký tự in hoa, ở đây chúng ta đổi cả 1 xâu kí tự? vậy chúng ta xử lý vấn đề này như thế nào? HS: đưa ra cách xử lý. GV: Chúng ta đã biết có thể coi xâu là mảng 1 chiều mà mỗi phần tử là một kí tự. Mỗi kí tự của xâu được đánh số thứ tự thường bắt đầu từ 1, số kí tự của xâu chính là độ dài của xâu. Vậy để có thể chuyển 1 xâu nhập từ bàn phím thành chữ in hoa thì ta sẽ chuyển từng kí tự trong xâu thành kí tự in hoa: duyệt lần lượt từng phần tử trong xâu và gán phần tử đó bằng giá trị mới upcase(ch); Câu lệnh for i:=1 to length(st) do St[i]:=upcase(St[i]); dùng để thực hiện yêu cầu đó. Giáo viên gọi học sinh lên bảng viết chương trình. HS viết chương trình, sau đó GV nhận xét , sửa chữa ếu có sai sót. Chạy chương trình để học sinh theo dõi kết quả thực hiện. Chương tình bài tập 1: Program inhoa; Uses Crt; Var St: String; i:Byte; Begin Write(‘Nhap xau St: ‘); Readln(St); For i:=1 to length(St) do St[i]:=Upcase(St[i]); Write(‘Xau ket qua: ‘, St); Readln; End. Bài tập 2: Nhập 1 xâu St từ bàn phím (St<=80), đưa ra màn hình xâu đảo ngược của xâu đó (viết theo chiều ngược lại). VD: Input: ‘Hello’ Output: ‘olleH’ Gv nêu câu hỏi: làm thế nào để chúng ta có thể viết ngược lại xâu nhập vào? HS trả lời: GV: Để duyệt lần lượt các kí tự trong xâu St từ 1 đến hết (phần tử cuối cùng có chỉ số trùng với độ dài của xâu) ở các ví dụ và bài tập 1 chúng ta sử dụng vòng lặp biết trước for i:=1 to length(st) do Vậy nếu chúng ta sử dụng vòng lặp lùi for i:=length(s) downto 1 do thì có thể giải quyết được yêu cầu của bài toán không? Nếu được, em nào có thể viết được chương trình? HS: trả lời, GV gọi hs lên bảng viết CT, sau đó nhận xét và chạy thử chương trình học sinh viết, hs quan sát kết quả thực hiện chương trình trên màn hình máy chiếu. Chương trình bài tập 2: Program xaunguoc; Uses Crt; Var St: String[80]; i:Byte; Begin Write(‘Nhap xau St: ‘); Readln(St); For i:=length(St) downto 1 do write(St[i]); Write(‘Xau nguoc cua xau st la: ‘, St); Readln; End. Bài tập 3: Nhập 1 xâu St từ bàn phím (St<=25), đưa ra màn hình xâu st nhưng mỗi kí tự viết trên 1 dòng VD: Input: ‘Hello’ Output: H e l l o Phần lớn học sinh vẫn chưa biết khi nào thì sử dụng write, khi nào dùng writeln. Mục đích của bài tập này tôi đưa ra để nhằm củng cố cho hs viêc sử dụng thành thạo thủ tục write và writeln, sự khác biệt giữa 2 thủ tục này. GV gọi hs nhắc lại sự khác biệt giữa 2 thủ tục, sau đó gọi hs lên bảng viết chương trình. GV chạy chương trình hoặc sửa chương trình của bài tập 2, hs theo dõi kết quả thực hiện trên màn hình à sự hứng thú cho học sinh khi học bài kiểu xâu và kết hợp với các thủ tục tưởng chừng như đã rất quen thuộc nhưng khi vận dụng thì các em thấy được sự kì diệu của tin học. Chương trình bài tập 3: Program baitap3; Uses Crt; Var St: String[25]; i:Byte; Begin Write(‘Nhap xau St: ‘); Readln(St); Write(‘ket qua la: ‘); For i:=1 to length(St) do writeln(St[i]:15); Readln; End. Bài tập 4: Nhập 1 xâu St từ bàn phím (St<=25), đưa ra màn hình xâu st nhưng mỗi kí tự viết trên 1 dòng ngược lại với xâu St VD: Input: ‘Hello’ Output: o l l e H Khi tôi nêu bài toán và hỏi hs: bạn nào xung phong lên bảng viết chương trình thì đã có khá nhiều cách tay giơ lên. Chương trình mà em HS đã sửa như sau: Program baitap4; Uses Crt; Var St: String[25]; i:Byte; Begin Write(‘Nhap xau St: ‘); Readln(St); Write(‘ketqua la:’); For i:= length(St) downto 1 do writeln(St[i]:15); Readln; End. Khi GV chạy CT cho các em hs theo dõi kết quả trên màn hình máy chiếu mà mình đã sửa thì các em ngạc nhiên và rất hào hứng: đơn giản chỉ sửa chương trình có 1 ít mà đã có kết quả rất thú vị, các em thấy tin học 11 không khó lắm. GV: Vậy chúng ta có thể tô màu cho chữ được không? Chẳng hạn xâu S đưa ra có màu xanh hoặc đỏ hoặc mỗi kí tự có một màu khác nhau? GV làm mẫu cho học sinh để các em thấy được kết quả cho các kí tự hiện ra có màu xanh lá. Tất cả hs trong lớp đều thấy phấn chấn và hào hứng học tập. Chương trình: Program baitap4; Uses Crt; Var St: String[25]; i:Byte; Begin Write(‘Nhap xau St: ‘); Readln(St); Write(‘ketqua la:’); Textcolor(2); For i:= length(St) downto 1 do writeln(St[i]:15); Readln; End. Gv giới thiệu cho học sinh về nhà tham khảo bài 19 ‘Thư viện chương trình con chuẩn” – phần kiến thức giảm tải và nêu thêm 1 số yêu cầu coi như bài tập ở nhà. GV: Vậy làm thế nào để chúng ta có thể tạo ra được các dòng chữ chạy trên các biển hiệu quảng cáo, hoặc khi các em không sử dụng máy tính vài phút thì trên màn hình hiện ra các dòng chữ chuyển động từ trái sang hoặc từ trên xuống, kiểu chữ, màu chữ trông rất đẹp. Khi nêu bài tập 5, tôi đã đặt câu hỏi như trên sau đó tôi mới nêu bài toán: Bài tập 5: Nhập 1 xâu từ bàn phím, đưa xâu đó ra giữa màn hình, chuyển động dần về bên trái, các ký tự đầu xâu sẽ lần lượt mất đi nhưng lại xuất hiện lần lượt ở cuối xâu. Tô màu cho xâu xuất hiện trên màn hình. GV chạy thử chương trình cho hs quan sát kết quả thực hiện, sau đó GV hướng dẫn học sinh viết chương trình có sử dụng 2 thủ tục chuchay và catdan ở bài tập và thực hành số 6, giải thích các câu lệnh trong 2 thủ tục. procedure catdan(s1:st79; var s2:st79); begin s2:=copy(s1,2,length(s1)-1)+s1[1]; end; procedure cangiua(var s:st79); var i,n:integer; begin n:=length(s); n:=(80-n) div 2; for i:=1 to n do s:=s+ ‘ ‘; end; Chương trình giải bài toán này như sau (giáo viên đã cài sẵn trên máy) program chuchay; uses Crt; type st79=string[79]; var s1,s2: st79; stop:bolean; procedure catdan(s1:st79; var s2:st79); begin s2:=copy(s1,2,length(s1)-1)+s1[1]; end; procedure cangiua(var s:st79); var i,n:integer; begin n:=length(s); n:=(80-n) div 2; for i:=1 to n do s:=s+ ‘ ‘; end; begin clrscr; write(‘Nhap xau s1: ‘); readln(s1); stop:=false; while not(stop) do begin gotoxy(1,12); write(s1); delay(600); catdan(s1,s2); s1:=s2; stop:=keypressed end; readln; end. Ở bài này học sinh được củng cố thêm về hàm copy(s,vt,n) để tạo ra 1 xâu mới Bài tập 6: Viết chương trình cho máy tính kiểm tra mật khẩu. Mật khẩu là ‘tinhoc’. Nếu vào đúng mật khẩu thì cho hiện dòng thông báo ‘welcome to windows’. Nếu gõ sai mật khẩu thì máy cho hiện dòng thông báo ‘bạn kiểm tra lại password’. GV: Các em thấy ở một số máy khi khới động vào windows thì máy tính yêu cầu chúng ta phải gõ mật khẩu, hoặc khi chúng ta không làm việc với máy tính sau một khoảng thời gian nhất định chúng ta sử dụng lại thì trên màn hình cũng xuất hiện cửa sổ yêu cầu người dùng phải nhập pass. Nếu nhập mật khẩu sai thì chúng ta không thể làm việc cùng máy tính được nữa? Việc này để tăng cường tính năng bảo vệ máy tính, bảo mật thông tin. Vậy chúng ta có thể làm được điều đó hay không? Bài tập này giúp các em củng cố lại phần kiến thức về việc so sánh 2 xâu. GV: Gợi ý học sinh viết chương trình Chương trình giải bài tập 6: 2. Giải quyết vấn đề. Trong quá trình thảo luận để giải thích, chứng minh vấn đề “khả năng chuyển đổi qua lại giữa hai câu lệnh lặp” bắt buột học sinh phải nắm vững cú pháp, cũng như ý nghĩa của hai câu lệnh trên. Dẫn đến việc các em thấy được sự giống và khác nhau của hai câu lệnh một cách rõ ràng hơn. 3. Kết quả thu được. Trong quá trình trao đổi, thảo luận, trình bày học sinh được thể hiện khả năng vận dụng, hiểu biết của mình nên các em tỏ ra hăng hái trong việc giơ tay phát biểu tranh luận. Đồng thời tiết học trở nên sinh động hơn và giáo viên không đóng vai trò là người xây dựng lý luận mà học sinh là người chủ động để giải quyết các vấn đề. C. KẾT LUẬN Ngôn ngữ lập trình nói chung đóng vai trò rất quan trọng trong việc xây dựng các chương trình ứng dụng để phục vụ cho cuộc sống. Nhờ sự phát triển của tin học _trong đó các nhà lập trình chuyên nghiệp đóng vai trò không nhỏ_ mà hiện nay hầu hết các lĩnh vực trong xã hội đã ứng dụng được tin học để giải quyết công viêc nhanh, hiệu quả và chính xác hơn. Hiện nay, ngôn ngữ lập trình Pascal đã trở thành ngôn ngữ lập trình phổ biến nhất trên thế giới sử dụng trong lĩnh vực giảng dạy. Trong quá trình giảng dạy các thầy cô có thể đưa ra các vấn đề như lập trình các game nhỏđể các em có thể chứng tỏ được khả năng của mình làm cho học sinh yêu thích môn học, ham học hỏi và tìm tòi sáng tạo. Đề tài này mang tính thực tiển rất cao cụ thể là: trong tiết học các em học sinh đã chủ động để tìm tòi lại kiến thức đã học qua đó giải quyết được vấn đề do giáo viên đặt ra. Trong quá trình giải quyết vấn đề, giáo viên chỉ ra những sai lầm mà các em học sinh mắc phải do hiểu không rỏ vấn đề giúp cho các em hiểu rỏ hơn về câu lệnh. Kết quả là có rất nhiều em đã dể dàng vận dụng được câu lệnh lặp để giải các vấn bài toán lặp do giáo viên đặt ra. D. TÀI LIỆU THAM KHẢO 1.Sách giáo khoa tin học 11 Hồ Sĩ Đàm chủ biên 2. Sách giáo viên tin học 11 Hồ Sĩ Đàm chủ biên 3. Lý thuyết và Bài tập lập trình Pascal 5.5-6.0 Nguyễn Thị Kiều Duyên 4. Một số sáng kiến kinh nghiệm và ý kiến của đồng nghiệp. 5. 1 số bài tập tham khảo trên Internet.
File đính kèm:
sang_kien_kinh_nghiem_bai_tap_kieu_xau.doc