1. Trang chủ
  2. » Giáo án - Bài giảng

Skkn một số bài tập cơ bản về kiểu xâu tin học 11

20 1,4K 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 20
Dung lượng 119,5 KB

Nội dung

ĐẶT VẤN ĐỀ 1/ Lí do chọn đề tài: Hiện nay, Tin học là bộ môn bắt buộc trong chương trình THPT, tuy là môn học bắt buộc nhưng không là một trong những môn thi tốt nghiệp trung học phổ thô

Trang 1

A ĐẶT VẤN ĐỀ 1/ Lí do chọn đề tài:

Hiện nay, Tin học là bộ môn bắt buộc trong chương trình THPT, tuy là môn học bắt buộc nhưng không là một trong những môn thi tốt nghiệp trung học phổ thông quốc gia nên nhìn chung thái độ của học sinh (trừ học sinh các lớp chuyên Tin của các trường chuyên) đối với môn học này chưa thật sự tốt Mặt khác, chương trình Tin học nói chung và chương trình Tin học 11 nói riêng tương đối khô khan và khó hiểu Với Tin học lớp 11 học sinh bước đầu làm quen với việc lập trình sử dụng ngôn ngữ Pascal nên đại đa số các em đều cảm thấy rất khó hiểu, thấy trừu tượng Nhiều học sinh tâm sự rằng, mặc dù mình rất chịu khó đọc sách nhưng vẫn không hiểu mấy và thực sự cũng không cảm thấy hứng thú học môn này Các em tỏ ra rất lúng túng khi phải học nhiều kiểu dữ liệu và lúc lập trình phải suy nghĩ sử dụng kiểu nào cho hợp lí Bản thân tôi là giáo viên giảng dạy bộ môn Tin học, tôi nhận thấy trong việc giảng dạy cho học sinh, ngoài việc giúp học sinh lĩnh hội những kiến thức cơ bản Người giáo viên 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 của học sinh Bởi vì, khi có sự đam mê, các em tự nhiên sẽ học tập một cách tự giác, tích cực, chủ động để đạt được mục tiêu đặt ra

Tạo đam mê học tập cho học sinh không phải là việc làm đơn giản, không chỉ đơn giản là việc giáo viên phải nêu rõ mục tiêu cho mỗi tiết học mà còn thể hiện trong cách giáo viên gợi động cơ cho các em và đặc biệt là phải đầu tư thiết kế bài giảng cho mỗi tiết học thật chi tiết, thật lôi cuốn Các cách thiết kế bài giảng hiện nay nhằm mục đích áp dụng phương pháp hiện đại để bồi dưỡng cho học sinh năng lực ham muốn học hỏi, tư duy sáng tạo, năng lực tự giải quyết vấn đề, rèn luyện và phát triển năng lực tự học, sáng tạo, nghiên cứu, nghĩ và làm việc một cách tự chủ Trong quá trình học lập trình,

để lập trình cho một bài toán cụ thể, một trong những điều quan trọng nhất là học sinh phải xác định các biến sử dụng trong chương trình và kiểu dữ liệu tương ứng của các biến đó sao cho hợp lí và chính xác Trong quá trình giảng

Trang 2

dạy tôi nhận thấy các em học sinh tỏ ra khá lúng túng khi xác định kiểu dữ liệu, nhất là các kiểu dữ liệu như kiểu dữ liệu mảng một chiều, kiểu dữ liệu xâu…

Giải quyết vấn đề này, với mỗi kiểu dữ liệu mới, giáo viên ngoài việc cung cấp cho các em các kiến thức cơ bản về lý thuyết của kiểu dữ liệu đó cần dành nhiều thời gian để phân tích các ví dụ, các bài tập cơ bản có trong sách giáo khoa Ngoài ra, giáo viên nên chú ý chuẩn bị sẵn hệ thống các ví dụ, các bài tập cụ thể, cơ bản khác nhưng phù hợp với trình độ của học sinh lớp mình dạy Để từ việc tìm hiểu về các ví dụ đó học sinh không những củng cố về lý thuyết mà còn hiểu sâu sắc hơn kiểu dữ liệu tương ứng Xuất phát từ tinh thần

đó cũng như từ thực tế trình độ của học sinh các lớp 11 trường THPT Phạm

Văn Đồng mà tôi đang giảng dạy, tôi chọn đề tài: " Một số bài tập cơ bản về kiểu xâu tin học 11" , với mong muốn từ việc tìm lời giải cho các bài tập này

và thực hiện chúng trực tiếp trên máy tính các em học sinh sẽ cảm thấy thích thú và hiểu sâu kiến thức hơn

2/

Thực trạng trước khi thực hiện sáng kiến:

a) Thuận lợi:

 Việc ứng dụng công nghệ thông tin vào tất cả các lĩnh vực được đề cao

 Môn Tin học là môn chính khóa trong trường phổ thông

 Các em học sinh thích được thực hành trên máy tính để nghiên cứu, tìm tòi

b) Khó khăn:

 Trình độ học sinh không đồng đều và đa số không nắm vững kiến thức các môn tự nhiên

 Đa số học sinh không thích môn Tin học, mang tâm lí Tin học 11 là môn trừu tượng, khó hiểu Giáo viên ít có sự đầu tư để cải tiến, nâng cao chất lượng dạy học

Trang 3

c) Số liệu thống kê

Qua các lớp tôi đang dạy, khi học đến chủ đề Kiểu xâu đa số các em học

sinh còn lúng túng khi sử dụng đến kiểu dữ liệu mới, không hình dung được chương trình mà mình phải viết

Khảo sát thực tế lớp 11B2 (năm 2014-2015) có 37 học sinh khi đã dạy xong chủ đề "Kiểu xâu", tôi đã cho học sinh làm bài kiểm tra 15 phút về kiểu xâu như sau:

Bài tập: Viết chương trình nhập vào một xâu kí tự (độ dài không quá

100) và một kí tự bất kỳ từ bàn phím Thông báo xem kí tự đó có xuất hiện trong xâu vừa nhập hay không?

Tỷ lệ 8,1% 10,9% 35,1% 21,6% 16,2% 5,4% 2,7% 45,9% Với bài toán trên do học sinh chưa nắm vững kiến thức lập trình, đặc biệt còn lúng túng trong việc sử dụng kiểu dữ liệu nên còn gặp nhiều sai sót khi viết chương trình

Trang 4

B NỘI DUNG

I Cơ sở lí luận.

Khi tìm hiểu đến chủ đề Kiểu dữ liệu có cấu trúc học sinh phải dựa

vào các kiểu dữ liệu chuẩn có sẵn để xây dựng nên các kiểu dữ liệu mới phục

vụ cho các yêu cầu cao hơn

Giáo viên có thể gợi động cơ bằng cách hỏi: "Với yêu cầu viết chương trình nhập vào họ tên của hai bạn học sinh bất kỳ, in ra màn hình bạn có tên dài hơn", với những kiểu dữ liệu mà em đã học liệu có thực hiện được yêu cầu này không? Từ đó dẫn dắt vào kiểu dữ liệu mới: "Kiểu xâu" Sau khi cho học sinh tìm hiểu những kiến thức cơ bản về lý thuyết kiểu dữ liệu này Giáo viên

có thể xây dựng hệ thống các bài tập và dẫn dắt học sinh giải quyết các bài tập này

II Chuẩn bị, nội dung và giải pháp thực hiện.

1/ Chuẩn bị

a/ Về phương pháp:

- Giáo viên chuẩn bị trước các bài tập cơ bản dạng kiểu xâu để phân tích, dẫn dắt cho học sinh làm

b/ Về phương tiện:

- Giáo viên chuẩn bị máy tính “để bàn hoặc xách tay”, một máy chiếu, một màn chiếu, bảng phụ …

- Học sinh cần có đầy đủ sách bút, vở ghi…

2/

Nội dung.

Bài tập 1: Viết chương trình nhập vào một xâu kí tự (độ dài không quá 100)

và một kí tự ch bất kỳ từ bàn phím Đếm số lần xuất hiện của kí tự ch trong

xâu kí tự vừa nhập

Ví dụ: Nhập vào xâu: 'HOC TOT TIN HOC', nhập kí tự: 'T' thì kết quả

số lần xuất hiện của kí tự 'T' trong xâu 'HOC TOT TIN HOC' là 3 lần.

GV hướng dẫn học sinh bằng cách đặt các câu hỏi cho học sinh trả lời: Nêu ý tưởng để giải bài toán? Làm thế nào để đếm được?

Trang 5

HS: Kiểm tra kí tự vừa nhập với lần lượt từng kí tự trong xâu, nếu bằng nhau thì ta tăng số lần xuất hiện (biến đếm) lên 1

GV: Kiểm tra bằng cách nào?

HS: Sử dụng vòng lặp với số lần biết trước (số lần lặp bằng độ dài của xâu)

Với mỗi kí tự trong xâu lấy ra so sánh với kí tự ch.

Câu lệnh: for i:= 1 to length(xau) do để duyệt lần lượt từng kí tự trong

xâu

GV (giải thích thêm): Để lưu lại giá trị của số lần xuất hiện, ta sử dụng biến

dem, ban đầu biến này được khởi tạo bằng 0, lấy lần lượt từng kí tự trong xâu

ra so sánh với kí tự ch nếu chúng bằng nhau thì giá trị của biến đếm được tăng lên 1 Kết thúc vòng lặp, giá trị của biến dem chính là kết quả cần tìm.

GV: cho học sinh suy nghĩ, viết bài trong 5 phút sau đó gọi một em bất kỳ lên trình bày:

GV: yêu cầu các HS khác nhận xét và chữa bài cho hoàn chỉnh GV có thể thực hiện chạy chương trình hoàn chỉnh lên máy chiếu cho HS quan sát, gọi trực tiếp vài em lên nhập dữ liệu và xem kết quả thực hiện trên màn hình

Program baitap1;

Var s:string[100];

i, dem: byte;

ch: char;

Begin

Writeln('nhap vao xau bat ki:'); Readln(s);

Write('nhap mot ki tu bat ki:');

Readln(ch); dem:=0;

For i:= 1 to length(s) do

If s[i] = ch then dem:=dem+1;

Write('so lan xuat hien cua ki tu ', ch,' trong xau vua nhap la: ',dem);

Readln

End.

Trang 6

Tiếp theo, từ chương trình vừa viết, giáo viên yêu cầu học sinh chỉnh sửa để thực hiện bài tập tiếp theo:

Bài tập 2: Viết chương trình nhập vào một xâu kí tự (độ dài không quá 100)

và một kí tự bất kỳ từ bàn phím Thông báo xem kí tự đó có xuất hiện trong xâu kí tự vừa nhập hay không?

Ví dụ: Nhập vào xâu: 'HOC TOT TIN HOC' nhập kí tự: 'T' thì kết quả là

kí tự có xuất hiện trong xâu vừa nhập

Với bài tập này, dù không khó nhưng học sinh lại lúng túng vì chương trình các em viết (sửa lại từ chương trình ở bài tập 1) đa số đều mắc chung

một lỗi là trong xâu vừa nhập có bao nhiêu kí tự giống kí tự ch thì chương

trình in ra bấy nhiêu dòng thông báo

GV: Giải thích cho HS hiểu, ở bài tập này gần giống như bài tập 1 nhưng chúng ta không đếm số lần nữa mà chỉ đưa ra thông báo là có xuất hiện hay không? Nếu kí tự đó xuất hiện nhiều lần ta cũng chỉ đưa ra một dòng thông báo có xuất hiện Vậy làm sao khắc phục lỗi này?

HS: Suy nghĩ để tìm ra câu trả lời

Để khắc phục lỗi này, giáo viên hướng dẫn học sinh kiểm tra giá trị của biến đếm trước khi in ra thông báo Nếu biến đếm lớn hơn 0 thì có xuất hiện

và ngược lại thì không xuất hiện Sau đó yêu cầu HS tự chỉnh sửa bài tập 1 để

có bài tập 2 hoàn chỉnh

Chương trình hoàn chỉnh có thể như sau:

Program baitap2;

Var s:string[100];

i, dem: byte;

ch: char;

Begin

Writeln('nhap vao xau bat ki:');

Readln(s);

Write('nhap mot ki tu bat ki:');

Trang 7

Readln(ch); dem:=0;

For i:= 1 to length(s) do

If s[i] = ch then dem:=dem+1;

If dem>0 then

Write('ky tu ', ch, ' co xuat hien trong xau ',s)

Else

Write('ki tu ', ch, ' khong xuat hien trong xau ',s) Readln

End.

Để củng cố lại lần nữa các bài tập đếm với những yêu cầu khác nhau,

GV có thể yêu cầu học sinh tiếp tục chỉnh sửa chương trình để thực hiện bài tập sau:

Bài tập 3: Viết chương trình đếm số kí tự là chữ số trong một xâu kí tự được

nhập vào từ bàn phím

Ví dụ: Nhập vào xâu: 'HOC123' thì kết quả trả về là có 3 kí tự là chữ số

GV hỏi: Với bài tập này, điều kiện để biến dem tăng lên 1 là gì?

HS trả lời: Kiểm tra từng kí tự trong xâu (s) vừa nhập nếu kí tự nào là chữ số

thì biến dem được tăng lên 1.

GV: Câu lệnh sau sẽ thực hiện việc kiểm tra yêu cầu đó:

For i:= 1 to length(s) do

If (s[i]>='0') and (s[i] <='9') then dem:=dem+1;

HS tự chỉnh sửa để có bài tập 3, chương trình hoàn chỉnh như sau:

Program baitap3;

Var S: String;

i,dem: Byte;

Begin

Write(‘Nhap xau S: ‘);

Readln(S); dem:=0;

Trang 8

For i:= 1 to length(s) do

If (s[i]>='0') and (s[i] <='9') then dem:=dem+1;

Write(‘So ki tu chu so trong xau la: ‘, dem);

Readln

End.

Trong quá trình học các hàm và thủ tục thao tác trên kiểu dữ liệu xâu, học sinh thường nhầm lẫn chức năng của hàm upcase(ch) Để giúp học sinh hiểu kỹ hơn về hàm này, Giáo viên nên cho hs làm bài tập cơ bản sau đây:

Bài tập 4: 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ụ: Nhập xâu 'Cham Hoc' sẽ cho ra xâu 'CHAM HOC'

GV nêu câu hỏi: 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?

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(s) do S[i]:=upcase(S[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 Chạy chương trình để học sinh theo dõi kết quả thực hiện

Chương trình bài tập 4:

Trang 9

Program baitap4;

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 5: Viết chương trình nhập vào một xâu từ bàn phím, đưa ra màn hình

xâu đảo ngược của xâu vừa nhập

Trước tiên cần giải thích cho HS xâu đảo ngược tức là xâu có được bằng cách đọc ngược các kí tự trong xâu vừa nhập (đọc ngược từ phải sang trái) Sau khi giải thích xong GV hỏi: Làm thế nào để đọc ngược xâu?

HS: duyệt xâu theo thứ tự ngược, dòng vòng lặp for-do dạng lùi

GV: Với mỗi kí tự đọc ngược, ghép ký tự đó vào xâu mới, xâu này ban đầu được khởi tạo bằng rỗng Yêu cầu học sinh suy nghĩ để viết chương trình

GV yêu cầu HS lên chạy chương trình trực tiếp trên máy chiếu và sau đó chỉnh sửa, chiếu chương trình hoàn chỉnh lên cho hoc sinh quan sát:

Program baitap5;

Var S, Ng: String;

i: Byte;

Begin

Write(‘Nhap xau S: ‘);

Readln(S);

ng:='';

For i:= Length(S) downto 1 do

ng:=ng+s[i];

write('xau dao nguoc la: ', ng);

Trang 10

End.

Bài tập 6: Viết chương trình nhập vào từ bàn phím một xâu Kiểm tra xâu đó

có phải là xâu đối xứng hay không? (Tính chất của xâu đối xứng: đọc nó từ phải sang trái cũng thu được kết quả giống như đọc từ trái sang phải)

Ở bài tập này, GV yêu cầu học sinh dựa vào tính chất của xâu đối xứng

để nêu ý tưởng HS dựa vào tính chất xâu đối xứng và dựa vào kiến thức trong bài tập 5 vừa làm có thể hình thành ngay ý tưởng giải bài tập trên Với bài tập này, đa số các em đều làm theo cách tạo xâu đảo ngược từ xâu ban đầu vừa nhập, sau đó kiểm tra nếu xâu đảo ngược bằng xâu ban đầu thì kết luận xâu đối xứng GV yêu cầu học sinh chỉnh sửa bài tập 5 để có bài tập 6:

Program baitap6;

Var S, Ng: String;

i: byte;

Begin

Write(‘Nhap xau S: ‘);

Readln(S); ng:='';

For i:= Length(S) downto 1 do

ng:=ng+s[i];

if s=ng then

write('xau doi xung') else

write('xau khong doi xung');

Readln

End.

Ngoài cách kế thừa bài tập 5 ra, giáo viên có thể hướng dẫn để học sinh viết chương trình theo cách khác không dùng cách tạo xâu đảo ngược Gợi ý cho học sinh khai thác khả năng tham chiếu đến từng kí tự trong xâu thông qua vị trí của kí tự này Như vậy, không nhất thiết phải tạo một xâu mới để

Trang 11

cuối cùng so sánh hai xâu, mà chỉ cần so sánh các cặp kí tự ở vị trí đối xứng nhau để kết luận xâu là là xâu đối xứng hay không, chỉ cần xuất hiện một cặp

kí tự ở vị trí đối xứng mà không đối xứng thì xâu đó không đối xứng Hướng dẫn học sinh tìm các vị trí đối xứng

GV: kí tự thứ nhất đối xứng với kí tự nào trong xâu?

HS: kí tự ở vị trí 1 đối xứng với kí tự ở vị trí x (với x là độ dài xâu)

GV: tương tự vị trí thứ 2 đối xứng với vị trí thứ x-1, thứ 3 với vị trí x-2,

Vậy vị trí thứ i sẽ đối xứng với vị trí nào?

HS: vị trí thứ x-i+1

Như vậy vòng lặp chỉ cần chạy (x div 2) lần là được

Yêu cầu học sinh về nhà làm tiếp bài tập theo cách thứ 2 này

Để học HS có thể hiểu và thành thạo các thao tác xử lí xâu, GV tiếp tục đưa ra các bài tập sau:

Bài tập 7: Viết chương trình nhập một xâu từ bàn phím, đưa ra màn hình xâu

thu được từ nó sau khi loại bỏ các dấu cách có trong xâu

GV hướng dẫn học sinh có thể sử dụng các thao tác xử lí xâu để giải quyết bài tập này, cho học sinh thảo luận để tìm ra cách giải

GV gợi ý: Kết quả ta đưa ra là xâu sau khi loại bỏ những kí tự là dấu cách (học sinh có thể biểu diễn kí tự là dấu cách là dấu cách đặt trong cặp nháy đơn ' ' hoặc biểu diễn bằng mã của dấu cách là #32), xâu OUTPUT sẽ chứa tất cả các kí tự trong xâu INPUT trừ kí tự là dấu cách Như vậy, dựa vào các kiến thức đã học ta có thể xử lý yêu cầu trên theo 2 cách: Cách 1: Sử dụng phép ghép xâu tạo xâu mới gồm tất cả các kí tự trong xâu INPUT mà khác kí

tự là dấu cách

Cách 2: Sử dụng thủ tục delete(st,vt,n) để xóa tất cả các kí tự là dấu cách trong xâu INPUT

Trang 12

Hướng dẫn HS để viết chương trình theo 2 cách: Với Cách 1, hướng dẫn cách khởi tạo xâu rỗng, kiểm tra lần lượt từng kí tự trong xâu ban đầu nếu kí tự nào khác kí tự dấu cách (#32) thì được ghép vào xâu rỗng vừa khởi tạo

Cách thứ 2 cần hướng dẫn học sinh bằng cách đặt các câu hỏi dẫn dắt như:

Làm sao để xác định được vị trí chứa kí tự là dấu cách trong xâu vừa nhập? Để xóa kí tự là dấu cách đó ta dùng thủ tục nào? Việc xóa các kí tự là dấu cách sẽ chấm dứt khi nào? Số lần lặp lại này là xác định hay không xác định?

Chương trình theo 2 cách có thể như sau:

Cách 1:

Program baitap7_1;

Var S, S1: String;

i :Byte;

Begin

Write(‘Nhap xau S: ‘);

Readln(S);

S1:=''; {khoi tao xau rong}

For i:=1 to length(s) do

If s[i]<>#32 then s1:=s1+s[i];

Writeln('ket qua la: ', s1);

Readln

End.

Cách 2:

Program baitap7_2;

Var S: String;

i,vt :Byte;

Begin

Write(‘Nhap xau S: ‘);

Readln(S);

Ngày đăng: 10/02/2017, 11:20

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w