Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 20 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
20
Dung lượng
113,5 KB
Nội dung
A PHẦN MỞ ĐẦU Lí chọn đề tài Trong thực tiễn liệu vào toán liên quan đến kiểu liệu khác nhau, để tiện cho việc lập trình xử lý liệu thường đưa liệu dạng kiểu liệu chuẩn kiểu liệu có cấu trúc, kiểu liệu có cấu trúc kiểu xâu Qua q trình tham gia giảng dạy Tin học khối 11 trường THPT Thiệu Hóa, tơi nhận thấy liệu kiểu xâu thường gặp nhiều toán vận dụng linh hoạt thao tác xử lý kiểu liệu vào tốn khơng phải dễ Việc học sinh tìm hiểu kiểu liệu có cấu trúc nói chung kiểu liệu xâu nói riêng cịn nhiều lúng túng Đặc biệt liệu vào kiểu xâu yêu cầu toán liên quan đến kiểu liệu xâu, học sinh thường không để giải vấn đề mà toán đưa Kỹ làm việc với kiểu liệu xâu học sinh thường không đáp ứng yêu cầu đề Tin học lập trình lớp 11 nội dung lạ đa số học sinh với nhiều khái niệm, thuật ngữ, cấu trúc liệu mà học sinh tiếp xúc lần đầu Chính mà học sinh dễ mắc sai lầm lập trình giải tốn Ngun nhân dẫn đến khó khăn mà học sinh thường gặp là: + Gặp khó khăn xác định toán đặc biệt xác định dạng tốn kiểu liệu xâu + Khó liên hệ phương pháp giải toán toán học với thuật toán tin học Trong việc giảng dạy cho HS, việc giúp học sinh lĩnh hội kiến thức bản, người thầy cịn phải biết kích thích tính tích cực, sáng tạo say mê học hỏi học tập em Vì việc học tập tự giác, tích cực, chủ động, sáng tạo địi hỏi học sinh phải có ý thức mục tiêu đặt ra, tạo động lực bên thúc đẩy thân em hoạt động để đạt mục tiêu Điều thực dạy học không đơn giản việc nêu rõ mục tiêu mà quan trọng gợi động Xuất phát từ thực tiễn giảng dạy trường THPT Thiệu Hóa, tơi thấy để đạt hiệu cao phần học, tiết học cần có cách thiết kế 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 đối tượng học sinh Để qua phần học, tiết học, học sinh thích thú với kiến thức mới, hiểu kiến thức học lớp, đồng thời thấy tầm quan trọng vấn đề: trước ứng dụng kiến thức để đáp ứng u cầu mơn học, sau ứng dụng vào thực tiễn đời sống xã hội Với lí tơi nghiên cứu chun đề “Kiểu liệu xâu kỹ vận dụng kiểu xâu qua hệ thống dạng tập” với mong muốn phần giúp học sinh giáo viên việc tìm lời giải cho số toán liên quan tới kiểu liệu xâu dễ dàng hơn, giúp cho em học sinh u thích nhiều ngơn ngữ lập trình Pascal Chuyên đề trình bày dựa kinh nghiệm giảng dạy thân tham khảo số tài liệu liên quan Mục đích nghiên cứu - Khắc sâu kiểu liệu xâu: khái niệm, cách khai báo, phép toán, hàm thủ tục kiểu liệu xâu - Hệ thống toán kiểu xâu dạng số dạng tập thường gặp giúp cho giáo viên học sinh phần nhận dạng giải số tập liên quan Đối tượng nghiên cứu - Đối tượng khảo sát: Học sinh khối 11, cụ thể lớp: 11I, 11P - Sử dụng ngơn ngữ lập trình Turbo Pascal Free Pascal để tiến hành lập trình tập thực nghiệm - Hình thành kỹ thực hành giải tập cho học sinh có hệ thống kiến thức với tập kiểu liệu xâu Phạm vi thực kiểu liệu xâu Phương pháp nghiên cứu - Phương pháp nghiên cứu + Kết hợp thực tiễn giáo dục trường THPT Thiệu Hóa + Có tham khảo tài liệu ngơn ngữ lập trình Pascal tài liệu sáng kiến kinh nghiệm đồng nghiệp - Phương pháp thuyết trình, quan sát, điều tra bản, phân tích kết thực nghiệm sư phạm,v.v… phù hợp với học mơn học Đóng góp đề tài - Học sinh sau giới thiệu cách hệ thống dạng tập xâu quy trình giải dạng nhận biết yêu cầu toán cách thức giải chúng cách hiệu - Hình thành HS kỹ phân tích, xử lý vấn đề liên quan đến 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 số chương trình chuẩn dạng thủ tục / hàm tạo điều kiện thuận lợi cho việc tiếp thu kiến thức cách viết chương trình có cấu trúc - Mở rộng số tập kiểu xâu để học sinh thấy ứng dụng quan trọng kiểu liệu xâu lập trình - Sáng kiến kinh nghiệm áp dụng lớp 11I, 11P năm học 2019-2020 trường THPT Thiệu Hóa, Thanh Hóa B NỘI DUNG Cơ sở lí luận Pascal ngơn ngữ khởi đầu, hành trang cho em tiếp cận ngôn ngữ bậc cao khác dễ dàng Nhưng để làm em cần phải hiểu viết chương trình Pascal cách linh hoạt Muốn em cần nắm vững cú pháp, ngữ nghĩa Pascal, sử dụng thành thạo câu lệnh biết lựa chọn, vận dụng kiều liệu phù hợp cho toán Nhất kiểu liệu xâu 2.Thực trạng việc sử dụng kiếu liệu Qua việc giảng dạy học sinh học lập trình lớp 11, tơi nhận thấy học sinh cịn nhiều bỡ ngỡ tiếp cận với lập trình có cấu trúc kiểu liệu có cấu trúc Với thao tác duyệt xâu thao tác kiểm tra tính chất phần tử xâu cần phải sử dụng cấu trúc lặp học sinh thường gặp nhiều khó khăn: + Sử dụng biến điều khiển + Tác động đến biến điều khiển vịng lặp + Thơng báo kết vịng lặp dẫn đến tình trạng lặp lại việc thông báo kết thực chương trình - Với cấu trúc lặp có số lần chưa biết trước HS gặp phải khó khăn như: + Xác định điều kiện để kết thúc vòng lặp + Khó xác định cấu trúc lặp để triển khai + Thường bỏ quên việc tác động đến điều kiện để kết thúc vòng lặp 3.Triển khai nội dung vấn đề nghiên cứu Chương I Những kiến thức kiểu xâu Khái niệm, tham chiếu đến phần tử xâu - Khái niệm: Xâu dãy kí tự thuộc bảng mã ASCII, kí tự gọi phần tử xâu Số lượng kí tự xâu gọi độ dài xâu Xâu có độ dài gọi xâu rỗng Trong Turbo Pascal xâu rỗng viết ‘’ VD: cho xâu s=‘Tin hoc’, xâu S có số kí tự =>độ dài xâu s - Tham chiếu đến phần tử xâu: [chỉ số phần tử] VD; s[1]=’T’, s[3]=’n’ Khai báo: Var : string[độ dài lớn xâu]; VD: var hoten:string[30]; S:string; {xâu s có độ dài 255} - Ngồi có kiểu khai báo khác xâu như: + Shortstring: Chính String + longstring: mảng ký tự có kiểu char Thơng thường kiểu char có kích thước 16 bit nên mảng có kích thước tối đa 16 bit = 65535 ký tự + ansistring (chỉ có free pascal)có kích thước gần 2GB = 30 B Cách nhập/xuất: Cách đọc hay viết kiểu xâu tương tự kiểu liệu khác, ta sử dụng thủ tục READ, WRITE Ví dụ: Readln(s); Writeln(s); Chương II Các phép tốn, thủ tục hàm xâu Phép ghép xâu : kí hiệu dấu cộng (+), dùng để ghép nhiều xâu thành VD: ‘Song’ + ’Hong’ cho kết cho xâu ‘SongHong’ Các phép so sánh , có thứ tự thực ưu tiên thấp phép ghép xâu thực việc so sánh hai xâu theo quy tắc sau: - Xâu A > xâu B cặp xkí tự khác chúng kể từ trái sang phải xâu A có mã ASCII lớn VD: ‘an’>’An binh’, kí tự ‘a’ có mã ASCII 97, kí tự ‘A’ có mã ASCII 65 - Nếu A B xâu có độ dài khác A đoạn đầu B A< B VD: ‘hoa’ < ’hoa binh’, - A=B xâu A B giống hoàn toàn VD: ‘hoa’=’hoa’, ‘hoa’’Hoa’ Một số thủ tục xử lý xâu: - Thủ tục Delete(s,vt,n): Xóa n kí tự xâu s, vị trí vt VD: Nếu S=’song’ Delete(s,1,3) cho kết S=’g’ - Thủ tục Insert(s1,s2,vt): Chèn xâu s1 vào s2, bắt đầu vị trí vt VD: Nếu S1=’Hinh’ S2=’hoc’ Insert(s1,s2,1) cho kết S1=’Hinhhoc’ - Thủ tục str(value,s): chuyển đổi giá trị kiểu số (value) sang dạng xâu kí tự gán cho biến s VD: n:=265; str(n,s) cho kết xâu s s=’265’ - Thủ tục val(s,value,code): đổi xâu kí tự s sang dạng số gán cho biến value, biến đổi thành cơng code nhận giá trị 0, ngược lại cho giá trị khác VD: val(‘195’,value,code) lúc code=0 value=195 Một số hàm: TT Hàm Ý nghĩa Tạo xâu gồm n kí tự liên tiếp vị trí vt xâu s Copy(s,vt,n) Length(s) Cho giá trị độ dài xâu s Pos(s1,s2) Cho vị trí xuất xâu s1 xâu s2 Upcase(ch) Cho chữ in hoa ứng với chữ ch Ord(ch) Cho mã kí tự ch bảng mã ASCII Chr(n) Cho kí tự có mã n Concat(s1,s2, ,sn) Cho xâu cách nối đuôi xâu s1,s2, ,sn lại với Chương III: Các dạng tập thường gặp Dạng 1: Một số tập củng cố kiến thức, tạo hứng thú cho học sinh: Bài tập 1: Viết chương trình nhập vào xâu ký tự từ bàn phím Đổi xâu ký tự sang chữ in hoa in kết hình Ví dụ: Input: ‘le thi hoa’ Output: ‘LE THI HOA’ GV nêu câu hỏi: Ứng dụng viết chữ in hoa em gặp trường hợp nào? HS: làm giấy khai sinh, kê khai lý lịch, làm hồ sơ thi tốt nghiệp, ĐHCĐ… GV: Làm để ta nhập họ tên vào máy chữ thường lên hình chữ in hoa có dấu? HS: sử dụng hàm upcase(ch) Giáo viên: Nhưng hàm upcase(ch) đổi kí tự thành ký tự in hoa, đổi xâu kí tự? xử lý vấn đề nào? HS: đưa cách xử lý Giáo viên: Chúng ta biết coi xâu mảng chiều mà phần tử kí tự Mỗi kí tự xâu đánh số thứ tự thường 1, số kí tự xâu độ dài xâu Vậy để chuyển xâu nhập từ bàn phím thành chữ in hoa ta chuyển kí tự xâu thành kí tự in hoa: duyệt phần tử xâu gán phần tử giá trị upcase(ch); Câu lệnh for i:=1 to length(s) S[i]:=upcase(S[i]); dùng để thực yêu cầu GV 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 có sai sót Chạy chương trình để HS theo dõi kết thực Chương trình: Program inhoa; Var S: String;i:Byte; Begin Write(‘Nhap xau S: ‘); Readln(S); For i:=1 to length(S) S[i]:=Upcase(S[i]); Write(‘Xau ket qua: ‘, S); Readln; End Bài tập 2: Nhập xâu S từ bàn phím (S1 then for j:=1 to n kq:=kq+s2[i] else kq:=kq+s2[i]; inc(i); until i> length(s2); writeln(‘Xau giai nen la:’,kq); End Dạng Một số tập xâu Palindrome Xâu Palindrome hay gọi xâu đối xứng, có nghĩa xâu đọc ký tự xâu từ trái sang phải giống từ phải sang trái xâu gọi xâu Palinhdrome Với tập kiểm tra xâu Palindrome hay tìm kiếm xâu có tính chất Palindrome trước hết nên xây dựng hàm kiểm tra tính chất đối xứng xâu với độ phức tạp O(n), sở giải tập khó Bài tập 1: Kiểm tra xâu có phải xâu Palindrome không Program kiemtra; Var i,x:byte; S1,s2:string; Begin Write(‘nhap xau s1’); Readln(s1); X:=length(s1); S2:=’’; For i:=x downto s2:=s2+s1[i]; If s1=s2 then write(‘xau s1 la xau palindrome’) Else write(‘xau s1 không la xau palindrome’); Readln End Dạng 4: Ứng dụng kiểu xâu vào giải tốn kiểu số ngun: Bài tập 1: Viết chương trình nhập số tự nhiên a có n chữ số Hãy tạo số b từ số a cách viết ngược lại chữ số xuất a 13 Ví dụ: cho a=234 b=432 GV: Dựa vào kiến thức kiểu xâu, em nêu ý tưởng giải toán này? HS: GV: Nhận xét câu trả lời hs, nêu rõ: để tạo số b từ số a, cách viết ngược lại chữ số a thì: + tạo xâu rỗng s + cần sử dụng vòng lặp biết trước lùi (giống tập phần a) + dùng thủ tục val để đổi xâu kí tự s sang dạng số gán cho biến value GV yêu cầu hs viết chương trình, sau GV chạy chương trình cho học sinh quan sát hình máy chiếu Gv giải thích giúp học sinh sửa lỗi chương trình em viết Chương trình: Program somoidaonguoc; Uses crt; Var a,bi,code: longint; S1,s2:string; Begin Write(‘nhap so a’); Readln(a); Str(a,s1); S2:=’’; {tạo xâu rỗng s2} For i:=length(s1) downto s2:=s2+s1[i]; Val(s2,b,code); Write(b); Readln; End Bài tập 2: Số nhỏ nhất: Một số nguyên dương n lớn cho P (P20) số nguyên dương A P xâu ký tự s1, s2, ,sp (độ dài xâu không vượt 255) gồm số thập phân cách viết s1 liên tiếp A1 lần viết s2 liên tiếp A2 lần, , viết sp liên tiếp Ap lần 14 Giả sử với số n cho cho trước số nguyên dương k nhỏ số chữ số N Hãy tìm cách gạch k chữ số N để nhận số có giá trị nhỏ Ví dụ: Vào Kết p=3, k =11 a1=3, a2 = 4, a3 = s1 = 123, s2=0, s3 = 45 44 - Ý tưởng: Ở toán N số nguyên lớn nên ta sử dụng xâu để biểu diễn nó, giả sử số n lớn ghép lại m ký tự khác sau xóa ta cịn lại m-k chữ số n Lần lượt tìm m chữ số nhỏ xâu cịn lại ta kết cần tìm Chương trình tham khảo: {$MODE OBJFPC} Var A : array[1 20] of longint; S: array[1 20] of ansistring; st,kq ,sm: ansistring; code, k,i,p,m,j :longint; BEGIN { Nhap du lieu} st:=''; Write('Nhap p '); Readln(p); Write('Nhap k ');Readln(k); For i:=1 to p readln(a[i]); for i:=1 to p readln(s[i]); for i:=1 to p For j:=1 to A[i] st:=st+S[i]; {Xu li du lieu} j:=0; m:=length(st)-k; Repeat sm:='9'; 15 dec(m); For i:=j+1 to length(st)-m If sm>st[i] then Begin sm:=st[i]; j:=i; End; kq:=kq+sm; Until m=0; Val(kq,m,code); Write(m); Readln END Bài tập 3: Cho số nguyên dương N, ta tạo số nguyên N1 cách viết liên tiếp số nguyên từ đến N Ví dụ N = ta có N1 = 1234 Thực việc thu gọn N1 cách xóa tất chữ số vị trí lẻ, sau xóa tất số vị trí chẵn, lại xóa chữ số vị trí lẻ, … cịn lại chữ số Ví dụ: 1234 ->24-> Chương trình tập 3: Program taosonguyen; var s,h:string; i,n:integer; Begin Write('Nhap n='); Readln(n); s:=''; for i:=1 to n begin str(i,h); s:=s+h; end; writeln(s); Repeat 16 for i:=1 to length(s) if i mod 20 then s[i]:=' '; while pos(' ',s)0 delete(s,pos(' ',s),1); for i:=1 to length(s) if i mod 2=0 then s[i]:=' '; while pos(' ',s)0 delete(s,pos(' ',s),1); Until length(s)