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

Kiểu xâu và kỹ năng vận dụng kiểu xâu qua hệ thống các dạng bài tập

20 111 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 20
Dung lượng 113,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Lí do chọn đề tài Trong thực tiễn dữ liệu vào của các bài toán đều liên quan đến các kiểu dữ liệu khác nhau, để tiện cho việc lập trình và xử lý dữ liệu chúng ta thường đưa dữ liệu đó về

Trang 1

A PHẦN MỞ ĐẦU

1 Lí do chọn đề tài

Trong thực tiễn dữ liệu vào của các bài toán đều liên quan đến các kiểu dữ liệu khác nhau, để tiện cho việc lập trình và xử lý dữ liệu chúng ta thường đưa

dữ liệu đó về các dạng kiểu dữ liệu chuẩn hoặc kiểu dữ liệu có cấu trúc, một trong những kiểu dữ liệu có cấu trúc đó là kiểu xâu

Qua quá 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 dữ liệu kiểu xâu thường gặp rất nhiều trong các bài toán và vận dụng linh hoạt các thao tác xử lý trên kiểu dữ liệu này vào bài toán không phải là dễ Việc học sinh tìm hiểu về kiểu dữ liệu có cấu trúc nói chung và kiểu

dữ liệu xâu nói riêng còn khá nhiều lúng túng Đặc biệt là dữ liệu vào kiểu xâu

và những yêu cầu của bài toán liên quan đến kiểu dữ liệu xâu, học sinh thường không biết bắt đầu từ đâu để giải quyết vấn đề mà bài toán đưa ra Kỹ năng khi làm việc với kiểu dữ liệu xâu của học sinh thường không đáp ứng được yêu cầu

đề ra

Tin học lập trình lớp 11 là một nội dung mới lạ đối với đa số học sinh với nhiều khái niệm, thuật ngữ, cấu trúc dữ liệu mà học sinh mới được tiếp xúc lần đầu Chính vì vậy mà học sinh dễ mắc sai lầm khi lập trình giải quyết các bài toán Nguyên nhân dẫn đến những khó khăn mà học sinh thường gặp là:

+ Gặp khó khăn khi xác định bài toán đặc biệt là xác định dạng bài toán về kiểu dữ liệu xâu

+ Khó liên hệ phương pháp giải một bài toán trong toán học với thuật toán trong tin học

Trong việc giảng dạy cho HS, ngoài việc giúp học sinh lĩnh hội những kiến thức cơ bản, người thầy còn phải biết kích thích tính tích cực, sự sáng tạo say mê học hỏi trong học tập của các 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 về những mục tiêu đặt ra, tạo được động lực bên trong thúc đẩy bản thân các em hoạt động để đạt các mục tiêu đó Điều này được thực hiện trong dạy học không chỉ đơn giản bằng việc nêu rõ mục tiêu mà quan trọng hơn còn do gợi động cơ

Trang 2

Xuất phát từ thực tiễn giảng dạy tại trường THPT Thiệu Hóa, 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, hiểu được kiến thức đã học trên lớp, đồng thời thấy được tầm quan trọng của vấn đề: trước là ứng dụng của kiến thức để đáp ứng những yêu cầu của môn học, sau đó là ứng dụng vào thực tiễn trong đời sống xã hội

Với những lí do trên tôi đã nghiên cứu chuyên đề “Kiểu dữ liệu xâu và kỹ năng vận dụng kiểu xâu qua hệ thống các dạng bài tập” với mong muốn phần nào giúp học sinh cũng như giáo viên trong việc tìm ra lời giải cho một số bài toán liên quan tới kiểu dữ liệu xâu dễ dàng hơn, nhất là giúp cho các em học sinh có thể yêu thích nhiều hơn nữa ngôn ngữ lập trình Pascal Chuyên đề được trình bày dựa trên kinh nghiệm giảng dạy của bản thân và tham khảo một số tài liệu liên quan

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

- Khắc sâu kiểu dữ liệu xâu: khái niệm, cách khai báo, các phép toán, các hàm

và thủ tục trên kiểu dữ liệu xâu

- Hệ thống các bài toán về kiểu xâu dưới dạng một số dạng bài tập thường gặp giúp cho giáo viên và học sinh phần nào nhận dạng và giải một số bài tập liên quan

3 Đố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 và Free Pascal để tiến hành lập trình các bài tập thực nghiệm

- Hình thành được kỹ năng thực hành giải các bài tập cho học sinh và có được một hệ thống kiến thức với các bài tập về kiểu dữ liệu xâu Phạm vi thực hiện trên kiểu dữ liệu xâu

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

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

Trang 3

+ Kết hợp thực tiễn giáo dục ở trường THPT Thiệu Hóa

+ 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 của đồng nghiệp

- Phương pháp thuyết trình, quan sát, điều tra cơ bản, phân tích kết quả thực nghiệm sư phạm,v.v… phù hợp với bài học và môn học

5 Đóng góp của đề tài

- Học sinh sau khi được giới thiệu một cách hệ thống các dạng bài tập về xâu

và quy trình giải quyết từng dạng đã có thể nhận biết yêu cầu của bài toán và cách thức giải quyết chúng một cách hiệu quả

- Hình thành ở HS kỹ năng phân tích, xử 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 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 về cách viết chương trình có cấu trúc

- Mở rộng một số bài tập kiểu xâu để học sinh thấy được ứng dụng quan trọng của kiểu dữ liệu xâu trong lập trình

- Sáng kiến kinh nghiệm được áp dụng tại lớp 11I, 11P năm học 2019-2020 trường THPT Thiệu Hóa, Thanh Hóa

Trang 4

B NỘI DUNG

1 Cơ sở lí luận

Pascal là ngôn ngữ khởi đầu, là hành trang cho các em tiếp cận những ngôn ngữ bậc cao khác dễ dàng hơn Nhưng để làm được như vậy các em cần phải hiểu và viết được các chương trình trong Pascal một cách linh hoạt Muốn vậy các em cần nắm vững cú pháp, ngữ nghĩa của Pascal, sử dụng thành thạo các câu lệnh và biết lựa chọn, vận dụng kiều dữ liệu phù hợp cho bài toán Nhất

là kiểu dữ liệu xâu

2.Thực trạng của việc sử dụng các kiếu dữ 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 khá nhiều bỡ ngỡ khi tiếp cận với lập trình có cấu trúc cũng như kiểu dữ liệu

có cấu trúc Với các thao tác duyệt xâu và các thao tác kiểm tra tính chất phần tử của 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 các biến điều khiển.

+ Tác động đến biến điều khiển ngay trong vòng lặp

+ Thông báo kết quả trong vòng lặp dẫn đến tình trạng lặp lại việc thông báo kết quả khi thực hiện chương trình

- Với cấu trúc lặp có số lần chưa biết trước HS cũng gặp phải những 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 cơ bản về kiểu xâu

1 Khái niệm, tham chiếu đến phần tử xâu

- Khái niệm: Xâu là dãy các kí tự thuộc bảng mã ASCII, mỗi kí tự được gọi là

một phần tử của xâu Số lượng kí tự trong một xâu được gọi là độ dài của xâu Xâu có độ dài bằng 0 được gọi là xâu rỗng Trong Turbo Pascal xâu rỗng được viết bởi ‘’

VD: cho xâu s=‘Tin hoc’, xâu S có số kí tự 7 =>độ dài xâu s là 7

Trang 5

- Tham chiếu đến phần tử xâu: <tên biến xâu>[chỉ số phần tử]

VD; s[1]=’T’, s[3]=’n’

2 Khai báo: Var <tên biến xâu>: string[độ dài lớn nhất của xâu];

VD: var hoten:string[30];

S:string; {xâu s sẽ có độ dài là 255}

- Ngoài ra có các kiểu khai báo khác của xâu như:

+ Shortstring: Chính là String

+ longstring: là 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ó trong free pascal)có kích thước gần 2GB = 230

B

3 Cách nhập/xuất: Cách đọc hay viết kiểu xâu tương tự như các kiểu dữ liệu

khác, ta sử dụng các thủ tục READ, hoặc WRITE

Ví dụ: Readln(s); Writeln(s);

Chương II Các phép toán, thủ tục và hàm về xâu

1 Phép ghép xâu : kí hiệu là dấu cộng (+), dùng để ghép nhiều xâu thành một.

VD: ‘Song’ + ’Hong’ cho kết quả cho xâu ‘SongHong’

2 Các phép so sánh <, <=, =, >=, >, <> có thứ tự thực hiện ưu tiên thấp hơn

phép ghép xâu và thực hiện việc so sánh hai xâu theo các quy tắc sau:

- Xâu A > xâu B nếu cặp xkí tự đầu tiên khác nhau giữa chúng kể từ trái sang phải trong xâu A có mã ASCII lớn hơn

VD: ‘an’>’An binh’, kí tự ‘a’ có mã ASCII là 97, kí tự ‘A’ có mã ASCII là 65

- Nếu A và B là các xâu có độ dài khác nhau và A là đoạn đầu của B thì A< B VD: ‘hoa’ < ’hoa binh’,

- A=B nếu xâu A và B giống nhau hoàn toàn

VD: ‘hoa’=’hoa’, ‘hoa’<>’Hoa’

3 Một số thủ tục xử lý xâu:

- Thủ tục Delete(s,vt,n): Xóa n kí tự của xâu s, bắt đầu từ vị trí vt

VD: Nếu S=’song’ thì Delete(s,1,3) cho kết quả 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’ và S2=’hoc’ thì Insert(s1,s2,1) cho kết quả S1=’Hinhhoc’

Trang 6

- Thủ tục str(value,s): chuyển đổi giá trị kiểu số (value) sang dạng xâu kí tự và

gán cho biến s

VD: n:=265;

str(n,s) sẽ cho kết quả xâu s là s=’265’

- Thủ tục val(s,value,code): đổi xâu kí tự s sang dạng số và gán cho biến value,

nếu biến đổi thành công thì code nhận giá trị bằng 0, ngược lại cho giá trị khác

0

VD: val(‘195’,value,code) lúc này code=0 và value=195

4 Một số hàm:

1 Copy(s,vt,n) Tạo xâu mới gồm n kí tự liên tiếp bắt đầu từ vị trí vt của xâu s

2 Length(s) Cho giá trị là độ dài xâu s

3 Pos(s1,s2) Cho vị trí xuất hiện đầu tiên của xâu s1 trong xâu s2

4 Upcase(ch) Cho chữ cái in hoa ứng với chữ cái trong ch

5 Ord(ch) Cho mã của kí tự ch trong bảng mã ASCII

6 Chr(n) Cho kí tự có mã là n

7 Concat(s1,s2, ,sn) Cho xâu mới bằng cách nối đuôi các xâu s1,s2, ,sn lại với nhau

Chương III: Các dạng bài tập thường gặp

1 Dạng 1: Một số bài 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 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: ‘le thi hoa’

Output: ‘LE THI HOA’

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)

Giáo viên: 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ý

Trang 7

Giáo viên: 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(s) do S[i]:=upcase(S[i]); dùng để thực hiện 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 nếu có sai sót Chạy chương trình để HS theo dõi kết quả thực hiện

Chương trình:

Program inhoa;

Var S: String;i:Byte;

Begin

Write(‘Nhap xau S: ‘); Readln(S);

For i:=1 to length(S) do S[i]:=Upcase(S[i]);

Write(‘Xau ket qua: ‘, S);

Readln;

End

Bài tập 2: Nhập 1 xâu S từ bàn phím (S<=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? Học sinh trả lời:

GV: Để duyệt lần lượt các kí tự trong xâu S 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(s) 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?

Trang 8

HS: trả lời

GV gọi học sinh 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:

Program xaunguoc;

Var S: String[80]; i:Byte;

Begin

Write(‘Nhap xau S: ‘); Readln(S);

For i:=length(S) downto 1 do write(S[i]);

Write(‘Xau nguoc cua xau s la: ‘, S);

Readln;

End

Bài tập 3: 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 học sinh quan sát kết quả thực hiện, sau đó giáo viên hướng dẫn HS 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+ ‘ ‘;

Trang 9

Chương trình: (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;

Trang 10

stop:=keypressed end;

readln;

end

Ở bài này HS đượ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 4: 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 ‘Dang nhap thanh cong’ Nếu gõ sai mật khẩu thì máy cho hiện dòng thông báo ‘Nhap lai 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ản bj-og thời gian nhất định 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 password 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:

Program ktmatkhau;

Uses crt;

Var s: string;

Begin

Clrscr;

repeat

Write(‘hay nhap password:’);

Readln(s);

Until s=’tinhoc’;

Readln End

Trang 11

Đây là chương trình đơn giản so sánh xâu s nhập vào với xâu ‘tinhoc’ nhưng khi thực hiện chương trình đã tạo được hiệu ứng tốt đối với học sinh, các

em thấy rất thú vị, thì ra lập trình cũng thật đơn giản Giáo viên còn giới thiệu thêm được cấu trúc lặp không biết trước số lần lặp repeat…until, và GV liên hệ với thực tế việc HS khi truy cập các trang mạng xã hội hoặc sử dụng một số dịch

vụ trên internet đều phải đăng nhập

2 Dạng 2: Biến đổi xâu

Việc biến đổi xâu được thực hiện trên mỗi ký tự trong xâu nên cần nắm rõ các hàm, thủ tục trên kiểu dữ liệu xâu để vân dụng một cách linh hoạt vào từng bài tập cụ thể

Bài 1 Rút gọn xâu

Cho xâu S1 chỉ gồm các chữ cái in thường với độ dài tối đa 250 ký tự Hãy viết chương trình để tạo ra xâu S2 từ xâu S1 bằng cách xóa các ký tự liên tiếp giống nhau trong xâu S1 và chỉ để lại một kí tự đại diện trong đoạn đó Input: Đọc từ file văn bản XAU.INP chứa xâu S1 chỉ gồm các chữ cái in thường

Output: Ghi ra file văn bản XAU.OUT là xâu S2 tìm được

Ví dụ:

TTTTiiinnhhhhhhooccc Tinhoc

- Ý tưởng: Duyệt từ đầu xâu đến cuối xâu, gặp 2 ký tự liên tiếp khác giống nhau

thì xóa đi một ký tự

- Chương trình Rút gọn xâu

Program rutgonxau;

Var s:string; i:integer;

Begin

Write(‘nhap xau s’);

Readln(s);

i:=1;

while i<length(s) do

begin

if s[i]=s[i+1] then delete(s,i,1)

else inc(i);

end;

writeln(‘ Xau s sau khi da rut gon la:’ ,s);

Readln

Ngày đăng: 10/07/2020, 11:36

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w