1. Trang chủ
  2. » Công Nghệ Thông Tin

Chuyên đề sáng kiến môn Tin học

27 567 2

Đ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 27
Dung lượng 635 KB
File đính kèm chuyen de sang kien du lieu Kieu xau.rar (470 KB)

Nội dung

chuyên đề thống kế kiến thức căn bản về dữ liểu kiểu xâu. Một số bài tập về dữ liệu kiểu xâu được lập trình trên ngôn ngữ TP. Chuyên đề hệ thống các thao tác xử lý xâu. Giải quyết một số bài tập từ đơn giản đến nâng cao về dữ liệu kiểu xâu, tệp. Chuyên đề sử dụng tốt cho giáo viên Tin học THPT tham khảo để giảng dạy cũng như học tập.

Trang 1

PHẦN 1: MỞ ĐẦU

1.1 Lí do chọn đề tài 3

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

1.3 Phạm vi nghiên cứu 4

PHẦN 2: KIỂU XÂU – MỘT SỐ BÀI TẬP LIÊN QUAN ĐẾN XÂU 2.1 Kiến thức cơ bản về kiểu xâu 5

2.1.1 Khái niệm xâu 5

2.1.2 Khai báo biến xâu 5

2.1.3 Một số thao tác xử lí xâu 6

2.2 Một số bài tập liên quan đến kiểu xâu 10

2.2.1 Bài tập xử lí xâu trong sách giáo khoa Tin học 11 10

2.2.2 Bài tập xử lí xâu trong sách bài tập Tin học 11 13

2.2.3 Một số bài tập nâng cao về xâu 17

2.3 Áp dụng vào thực tế giảng dạy tại trường THPT Chu Văn An 24

PHẦN 3: KẾT LUẬN VÀ KHUYẾN NGHỊ 26

PHẦN 4: TÀI LIỆU THAM KHẢO 27

Trang 2

PHẦN 1: MỞ ĐẦU 1.1 Lí do chọn đề tài:

Chương trình tin học phổ thông nói chung và chương trình tin học lớp 11 nói riêng có mục tiêu nhằm cung cấp cho học sinh những kiến thức cơ bản về lập trình, hình thành và phát triển khả năng tư duy thuật toán, năng lực sử dụng các thành tựu của ngành khoa học này trong học tập và trong các lĩnh vực hoạt động khác Trang bị cho học sinh một cách tương đối có hệ thống các khái niệm cơ bản nhất ở mức phổ thông về Tin học - một ngành khoa học với những đặc thù riêng - các kiến thức về khai báo, về câu lệnh, về cấu trúc

dữ liệu, của ngôn ngữ lập trình nói chung và ngôn ngữ lập trình Turbo Pascal - ngôn ngữ lập trình học đường nói riêng

Mặc dù chỉ là các kiến thức cơ bản, tuy nhiên chương trình tin học 11 là khó đối với học sinh Hơn nữa đây không phải là môn thi tốt nghiệm và thi đại học Điều này phần nào gây khó khăn cho giáo viên khi truyền đạt kiến thức và học sinh khi xác định mục tiêu đối với môn học Với học sinh, học lập trình có thể được xem như là học một “ngoại ngữ” giúp giao tiếp với “máy tính” Trong nội dung chương trình, bài kiểu xâu là một nội dung hay nhưng lại khó giảng cho học sinh Chính vì vậy, qua một số năm giảng dạy, tôi đã sưu tầm được một số bài tập liên quan đến kiểu xâu từ mức độ đơn giản đến phức tạp Hệ thống bài tập này sẽ giúp giáo viên giảng dạy tốt hơn khi dạy cho học sinh về kiểu xâu

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

Qua thực tế giảng dạy, tôi nhận thấy khi tới bài kiểu xâu, người giáo viên rất khó dạy còn học sinh thì khó tiếp thu Với bản thân tôi, tôi luôn phải tìm tòi các bài tập sao cho từ đó học sinh tự nhận ra được kiến thức và hơn hết là giúp cho các em thực sự say mê đối với bộ môn Tin học Từ đó hiệu quả giảng dạy và học tập sẽ tốt hơn rất nhiều

Từ thực tế trải qua gần mười năm công tác tại trường THPT Chu Văn

An, Thái Nguyên tôi đã sưu tầm và hệ thống được một số bài tập liên quan đến kiểu xâu Hi vọng với hệ thống bài tập liên quan đến kiểu xâu này, phần

Trang 3

nào giúp cho người giáo viên khi giảng dạy, cho học sinh khi học tập về lập trình với kiểu xâu.

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

Với những suy nghĩ và nhận xét như trên tôi mạnh dạn viết chuyên đề

sáng kiến kinh nghiệm: “Kiểu xâu và một số bài tập liên quan đến xâu”

Chuyên đề này của tôi gồm hai nội dung chính:

- Nội dung thứ nhất: Kiến thức cơ bản về kiểu xâu

- Nội dung thứ hai: Một số bài tập liên quan đến kiểu xâu

+ Nhóm bài tập 1: Các bài toán xử lí xâu trong sách giáo khoa+ Nhóm bài tập 2: Các bài toán xử lí xâu trong sách bài tập+ Nhóm bài tập 3: Một số bài tập xử lí xâu nâng cao

Trang 4

PHẦN 2 : NỘI DUNG

KIỂU XÂU – MỘT SỐ BÀI TẬP LIÊN QUAN ĐẾN XÂU

Chuyên đề sử dụng ngôn ngữ lập trình Pascal để tìm hiểu về kiểu xâu

và giải quyết các bài toán về xâu

2.1 KIẾN THỨC CƠ BẢN VỀ KIỂU XÂU

2.1.1 Khái niệm xâu:

* Khái niệm: Xâu là dãy kí tự trong bộ 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 gọi là xâu rỗng

* Ví dụ:

‘Tin hoc 11’ ‘le thi thanh van’ ‘Lop 11A1’

* Quy tắc, cách thức xác định kiểu xâu:

- Tên kiểu xâu

- Cách khai báo biến kiểu xâu

- Số lượng kí tự của xâu

- Các phép toán thao tác với xâu

- Cách tham chiếu tới phần tử của xâu

2.1.2 Khai báo biến xâu:

* Cú pháp khai báo:

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

Trong đó: var, string là từ khóa

Tên biến: là tên do người lập trình đặt, tuân theo quy tắc đặt tên

độ dài lớn nhất của xâu: có thể là các giá trị 1, 2, 255

* Ví dụ:

Var ten:string[10]; lop:string[6]; Biến xâu ten có thể nhận giá trị xâu không

quá 10 kí tự, biến lop có thể nhận giá trị xâu có độ dài không quá 6 kí tự

Var s:string; t:string[255]; Biễn xâu s và t đều có thể nhận giá trị xâu

có độ dài không quá 255 kí tự

Trang 5

2.1.3 Một số thao tác xử lí xâu

2.1.3.1 Gán giá trị cho biến xâu:

a) Gán giá trị từ bàn phím cho biến xâu:

* Cú pháp:

Read(<tên biến xâu>);

Hoặc Readln(<tên biến xâu>);

* Ví dụ: Readln(ten); read(lop); readln(s);

b) Sử dụng câu lệnh gán:

* Cú pháp:

<tên biến xâu>:=<biểu thức>;

Với biểu thức ở vế phải có thể là hằng xâu, có thể là một biểu thức nào đó trả

S:=ten + ‘ hoc lop ’ + lop;

Kết quả: S nhận giá trị ‘Lan hoc lop 11A1’

Trang 6

- 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 là nhỏ hơn B.

* Ví dụ:

‘May tinh’ <’May tinh cua toi’

‘Tin hoc’=’Tin hoc’; ‘Tin hoc’<>’tin hoc’;

‘Le mai’ < ‘‘Le hoa’

2.1.3.4 Một số hàm liên quan đến xâu

Hàm luôn trả về một giá trị nào đó, do vậy các hàm có thể tham gia vào các biểu thức tương ứng hoặc phải lưu giá trị mà hàm trả về vào biến

a) Hàm copy:

* Cách sử dụng: copy(s,vt,n)

Với: s là biến xâu hoặc hằng xâu, vt,n: thuộc kiểu nguyên

* Ý nghĩa: Sao chép n kí tự trong xâu s bắt đầu từ vị trí vt Vậy hàm copy trả

về 1 giá trị thuộc kiểu xâu

* Ví dụ: s:=’tin hoc’; t:=copy(s,5,3); Kết quả t =‘hoc’

b) Hàm length:

* Cách sử dụng: length(s)

Với: s là biến xâu hoặc hằng xâu

* Ý nghĩa: lấy độ dài của xâu s Vậy hàm length trả về 1 giá trị thuộc kiểu nguyên

* Ví dụ: s:=’tin hoc’; k:=length(s); kết quả k =7

c) Hàm pos:

* Cách sử dụng: pos(s1,s2)

Với: s1, s2 là biến xâu hoặc hằng xâu

* Ý nghĩa: lấy vị trí xuất hiện đầu tiên của s1 trong s2 Vậy hàm pos trả về 1 giá trị thuộc kiểu nguyên

* Ví dụ: s:=’tin hoc’;t:=’hoc’; k:=pos(t,s); kết quả k =5

d) Hàm upcase:

* Cách sử dụng: upcase(ch)

Với: ch là biến kí tự hoặc hằng kí tự

Trang 7

* Ý nghĩa: Chuyển 1 kí tự thành 1 kí tự in hoa tương ứng Vậy hàm upcase trả

về 1 giá trị thuộc kiểu kí tự

* Ví dụ: ch:=’a’; ch1:=upcase(ch); kết quả ch1 =’A’

e) Hàm chr:

* Cách sử dụng: chr(x)

Với: x là biến hoặc hằng thuộc kiểu byte

* Ý nghĩa: Trả về 1 kí tự ứng có mã là x trong bộ mã ASCII Vậy hàm chr trả

về 1 giá trị thuộc kiểu kí tự

* Ví dụ: x:=65; ch1:=chr(x); kết quả ch1 =’A’

f) Hàm ord:

* Cách sử dụng: ord(ch)

Với: ch là biến kí tự hoặc hằng kí tự

* Ý nghĩa: Cho giá trị mã ASCII thập phân của kí tự tương ứng của ch Vậy hàm ord trả về 1 giá trị thuộc kiểu byte

* Ví dụ: ch:=’A’; k:=ord(ch); kết quả k =65

g) Hàm pred :

* Cách sử dụng: pred(ch)

Với: ch là biến kí tự hoặc hằng kí tự

* Ý nghĩa: trả về 1 kí tự đứng ngay trước kí tự ch trong bộ mã ASCII Vậy hàm pred trả về 1 giá trị thuộc kiểu kí tự

* Ví dụ: x:=’D’; ch:=pred(x); kết quả ch =’C’

h) Hàm succ:

* Cách sử dụng: succ(ch)

Với: ch là biến kí tự hoặc hằng kí tự

* Ý nghĩa: Lấy kí tự đứng liền sau kí tự ứng với giá trị hiện thời của ch trong

bộ mã ASCII Vậy hàm succ trả về 1 giá trị thuộc kiểu kí tự

* Ví dụ: ch:=’a’; ch1:=succ(ch); kết quả ch1 =’b’

2.1.3.5 Một số thủ tục liên quan đến xâu

Thủ tục chỉ thực hiện một việc nào đó và không trả về giá trị nào nên

có thể sử dụng thủ tục như một lệnh

Trang 8

a) Thủ tục delete:

* Cách sử dụng: delete(s,vt,n);

Với: s là biến xâu vt,n: thuộc kiểu byte

* Ý nghĩa: Thực hiện xóa n kí tự trong xâu s bắt đầu từ vị trí vt Kết quả làm giá trị của biến s bị thay đổi

* Ví dụ: s:=’tin hoc’; delete(s,6,1); kết quả s =’tin hc’

b) Thủ tục insert:

* Cách sử dụng: insert(s1,s2,vt);

Với: s1 là biến xâu hoặc hằng xâu S2 là biến xâu vt: thuộc kiểu byte

* Ý nghĩa: Thực hiện chèn xâu s1 vào xâu s2 bắt đầu từ vị trí vt Kết quả làm giá trị của s2 bị thay đổi

* Ví dụ: s:=’tin hoc’; insert(‘*’,s2,4); kết quả s =’tin* hoc’

c) Thủ tục inc:

* Cách sử dụng: inc(ch);

Với: ch là biến kí tự

* Ý nghĩa: Thực hiện lấy kí tự đứng liền sau kí tự ứng với giá trị hiện thời của

ch trong bộ mã ASCII và ghi vào ch Thủ tục inc làm thay đổi giá trị của ch

* Ví dụ: ch:=’a’; inc(ch); kết quả ch =’b’

* Ví dụ: ch:=’c’; dec(ch); kết quả ch =’b’

Trang 9

2.2 MỘT SỐ BÀI TẬP LIÊN QUAN ĐẾN KIỂU XÂU

2.2.1 Bài tập xử lí xâu trong sách giáo khoa Tin học 11

Bài 1: Nhập họ tên của hai người vào từ bàn phím Đưa ra màn hình họ tên

dài hơn, nếu bằng nhau thì đưa ra họ tên nhập sau

Chương trình:

Var ten1,ten2:string[50];

Begin

Write(‘nhap ho ten nguoi thu nhat: ’); readln(ten1);

Write(‘nhap ho ten nguoi thu hai: ’); readln(ten2);

If length(ten1) > length(ten2) then write(ten1) else write(ten2); Readln

End.

Bài 2: Nhập hai xâu vào từ bàn phím Chuyển hai xâu đó sang chữ in hoa rồi

đưa ra màn hình Sau đó kiểm tra xem kí tự đầu tiên của xâu thứ nhất có trùng với kí tự cuối cùng của xâu thứ hai không?

Chương trình:

Var s1,s2:string; i:byte;

Begin

Write(‘nhap xau thu nhat: ’); readln(s1);

Write(‘nhap xau thu hai: ’); readln(s2);

For i:=1 to length(s1) do s1[i]:=upcase(s1[i]);

For i:=1 to length(s2) do s2[i]:=upcase(s2[i]);

Bài 3: Nhập một xâu vào từ bàn phím Kiểm tra xem xâu đó có đối xứng

không? (xâu đối xứng: đọc từ trái qua phải giống đọc từ phải qua trái)

For i:=1 to length(s) do t:=s[i]+t;

If t=s then writeln(‘Xau ‘,s,’ doi xung’) else writeln(‘Xau ‘, s,‘ khong doi xung’);

Readln End.

Trang 10

Bài 4: Nhập một xâu vào từ bàn phím Đưa ra màn hình xâu đó sau khi xóa

hết các kí tự cách nếu có

Chương trình:

Var s:string; i:byte;

Begin

Write(‘nhap xau can xu ly: ’); readln(s);

While pos(‘ ‘,s) <>0 do delete(s,pos(‘ ‘,s),1);

writeln(‘Xau da loai bo ki tu cach: ‘, s);

Readln End.

Bài 5: Nhập xâu s1 vào từ bàn phím Tạo xâu s2 gồm các chữ số có trong s1

Đưa ra màn hình lần lượt hai xâu s1, s2

For i:=1 to length(s1) do

If (s1[i]>’0’) and (s1[i]<’9’) then s2:=s2+s1[i];

writeln(‘Xau s1: ‘, s1);

writeln(‘Xau s2: ‘, s2);

Readln End.

Bài 6: Nhập một xâu kí tự s vào từ bàn phím Thông báo ra màn hình số lần

xuất hiện của mỗi chữ cái tiếng Anh trong s (không phân biệt chữ hoa hay thường)

Ý tưởng: - Nhập xâu s, chuyển xâu s thành xâu chứa các kí tự in hoa.

- Sử dụng mảng d[‘A’ ’Z’] chứa các số nguyên

- d[s[i]]:=d[s[i]]+1 nếu s[i]>=’A’ và s[i]<=’Z’ với i = 1, length(s)Chương trình:

Var s:string; i:byte; j:char;

Trang 11

Bài 7: Nhập vào từ bàn phím xâu s Thay thế tất cả các cụm kí tự ‘anh’ bằng

cụm kí tự ‘em’

Ý tưởng: - Sử dụng hàm pos để tìm vị trí cần chèn, cần xóa

- Thực hiện chèn thêm xâu ‘em’ bằng thủ tục insert, rồi mới tiến hành xóa xâu ‘anh’ trong xâu s bằng thủ tục delete

Delete(s, pos(‘anh’,s),3);

End;

writeln(‘Xau moi la: ’, s);

Readln End.

Bài 8: Viết chương trình đọc một xâu từ file in.txt Hãy cho biết trong xâu đó

có bao nhiêu chữ số mỗi loại? Kết quả ghi ra file out.txt?

Ví dụ

Nam 2014 co 365 ngay, thang 2 co 28 ngay 0: 1

1: 12: 33: 14: 15: 16: 18: 1Chương trình

Var a:array[‘0’ ’9’] of byte; s:string; f:text; j:char;

Trang 12

2.2.2 Bài tập xử lí xâu trong sách bài tập Tin học 11

Bài 1: (4.40- Tr45) File in.txt chứa họ tên của một người Viết chương trình

thực hiện chuẩn hóa tên cho đúng chính tả Ghi kết quả ra file out.txt

Reset(f); readln(f,s); close(f);

While pos(s,’ ‘)>0 do Delete(s,pos(s,’ ‘),1);

If s[1]=’ ‘ then delete(s,1,1);

If s[length(s)]=’ ‘ then delete(s,length(s),1);

For i:=1 to length(s)-1 do

If (s[i]=’ ‘) and (s[i+1]<>’ ‘) then s[i+1]:=upcase(s[i+1]);

Assign(f,’out.txt’); rewrite(f);

Write(f,s); close(f);

End

Bài 2: (4.27 – Tr 38) Để giữ bí mật người ta phải mã hóa các thông tin trước

khi truyền đi hoặc lưu trữ Một trong những cách mã hóa sớm nhất được sử dụng rộng rãi thời cổ đại là cách mã hóa do Xê Da đề xuất: trong thông điệp, người ta thay mỗi chữ cái bằng chữ cái đứng sau nó k vị trí trong bảng chữ cái Việc tìm kiếm thay thế được tiến hành vòng tròn theo bảng chữ cái Nếu bảng chữ cái có n chữ, thì sau chữ cái thứ n-1 là chữ cái n, sau chữ cái n là chữ cái thứ nhất, Cách mã hóa này được gọi là mã hóa Xê Da Các kí tự ngoài bảng chữ cái vẫn được giữ nguyên

Ví dụ: Với k = 2, thì xâu ‘TIN HOC’ được mã hóa thành ‘VKP JQE’

Hãy lập trình đọc số nguyên k, xâu s từ file goc.txt (hàng 1: số k, hàng 2: xâu cần mã hóa), sau đó ghi xâu đã mã hóa ra file ma.txt

Chương trình

Var s:string; i,k:byte; f:text;

Begin

Trang 13

Assign(f,'d:\goc.txt'); reset(f); readln(f,k); readln(f,s);

close(f);

For i:=1 to length(s) do

if (s[i]<='z') and (s[i]>='A') then

if (ord(s[i])+k) <= ord('z') then s[i]:=char(ord(s[i])+k) else s[i]:=char((ord(s[i])+k)-ord('z')+ord('A'));

Assign(f,'d:\ma.txt'); rewrite(f); writeln(f,s); close(f);

End.

Bài 3: (4.37- Tr 44) Tên các tháng trong một năm là Giêng, Hai, Ba, Tư,

Năm, Sáu, Bảy, Tám, Chín, Mười, Một, Chạp Ba tháng đầu tiên trong năm là

là mùa Xuân, ba tháng tiếp theo là mùa Hè, sau đó là ba tháng mùa Thu, và cuối cùng là ba tháng mùa Đông Hãy lập trình

- Nhập tên một tháng âm lịch từ bàn phím (tiếng Việt không dấu)

- Đưa ra màn hình mùa của tháng đó (tiếng Việt không dấu)

for i:=1 to length(s) do s[i]:=upcase(s[i]);

if (s='GIENG')or (s='HAI') or (s='BA') then k:=1

1: writeln('Thang ',t,' thuoc mua Xuan');

2: writeln('Thang ',t,' thuoc mua He');

3: writeln('Thang ',t,' thuoc mua Thu');

4: writeln('Thang ',t,' thuoc mua Dong');

end;

readln

end.

Bài 4: (4.38 - Tr 44) Rô-bốt được điều khiển bằng chương trình Mỗi lệnh

trong chương trình là một chữ cái trong tập {E, W, S, N}, trong đó E: dịch sang hướng Đông, W: dịch sang hướng Tây, S: dịch sang hướng Nam, N: dịch sang hướng Bắc Chương trình là một xâu chỉ chứa các kí tự trong tập đã nêu Người ta thử nghiệm Rô-bốt trên một sa bàn bằng phẳng, không có chướng ngại vật Rô-bốt được đặt ở điểm có tọa độ (0,0) Trục OX hướng về

Trang 14

phía Đông, trục OY hướng lên phía Bắc Thử nghiệm thỏa mãn các yêu cầu sau:

- Đưa Rô-bốt về vị trí có tọa độ (x,y) với x,y là số nguyên ≤ 100;

- Trong chương trình phải có đầy đủ các lệnh E, W, S, N

- Mỗi lệnh có thể được sử dụng nhiều lần

Hãy viết đoạn chương trình:

Bài 5: (4.42 - Tr 46) Người ta xâu N viên đá quý kích thước giống nhau thành

một vòng đeo cổ (5≤ N ≤ 120), mỗi viên có một màu trong số các màu được đánh số từ 1 đến 9 Để tăng tính độc đáo cho vòng trang sức quý này, người ta định lắp khóa đeo theo vị trí sao cho khi mở vòng ta được một dây đá quý có tính chất không phụ thuộc vào việc cầm đầu dây nào bên tay phải và đầu kia bên tay trái (tức tạo thành một xâu đối xứng), ta đều được một chuỗi hạt giống nhau, tức là viên đá thứ i từ trái sang luôn có màu j không phụ thuộc vào cách cầm

Trang 15

Ví dụ:

Hãy:

- Khai báo biến và kiểu dữ liệu cần sử dụng

- Xác định số vị trí khác nhau có thể mắc khóa tháo lắp vòng

Chương trình:

var s:string; k,dem,i:byte;

{Ham lay xau doi xung}

Trang 16

2.2.3 Một số bài tập nâng cao về xâu

Bài 1: Viết thủ tục chuẩn hóa một xâu? Biết xâu chuẩn là xâu thỏa mãn:

- không có kí tự cách ở đầu xâu và cuối xâu

- Giữa các từ chỉ có một kí tự cách

Ý tưởng: - Xóa 1 kí tự cách nếu có 2 kí tự cách liền nhau trong xâu

- Xóa 1 kí tự ở đầu và cuối xâu nếu đó là kí tự cách

Bài 2: Viết thủ tục đếm số từ có trong xâu?

Ý tưởng: - Xóa hết kí tự cách ở đầu xâu

- Duyệt từ đầu đến cuối xâu: nếu 2 kí tự liền nhau thỏa mãn kí tự trước là kí tự cách, kí tự sau là khác kí tự cách thì tăng biến đếm lên 1 đơn vị

if t[1]<>’ ‘ then t:=’ ‘+t; {ghep them ki tu cach o dau xau}

for i:=1 to length(t)-1 do

if t[i]=’ ‘ and (t[i+1]<>’ ‘) then tg:=tg+1;

demtu:=tg;

End;

Bài 3: Tệp in.txt thuộc thư mục gốc ổ D có 2 dòng, mỗi dòng chứa một số

nguyên có độ dài không quá 255 chữ số Viết chương trình đọc 2 số từ tệp in.txt rồi tính tổng hai số đó và ghi ra tệp out.txt ở thư mục gốc ổ D

Ngày đăng: 16/06/2016, 15:14

TỪ KHÓA LIÊN QUAN

w