Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 25 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
25
Dung lượng
43,31 KB
Nội dung
SỞ GIÁO DỤC VÀ ĐÀO TẠO THANH HOÁ TRƯỜNGTHPTVĨNHLỘC SÁNG KIẾN KINH NGHIỆM SÁNG KIẾN KINH NGHIỆM MỘT SỐ KINH NGHIỆM BỒI DƯỠNG HỌC SINH GIỎI VỀ KIỂU DỮ LIỆU XÂU TRONG NGƠN NGỮ LẬP TRÌNH C++ MỘT SỐ KINH NGHIỆM BỒI DƯỠNG HỌC SINH GIỎI VỀ KIỂU DỮ LIỆU XÂU TRONG NGƠN NGỮ LẬP TRÌNH C++ Người thực hiện: Bùi Thị Vân Chức vụ: Giáo viên Đơn vị công tác: Trường THPT Vĩnh Lộc SKKN thuộc môn: Tin học Người thực hiện: Bùi Thị Vân Chức vụ: Giáo viên Đơn vị công tác: Trường THPT Vĩnh Lộc SKKN thuộc mơn: Tin học THANH HỐ NĂM 2021 UAN VAN CHAT LUONG download : add luanvanchat@agmail.com MỤC LỤC Mở đầu 1.1 Lí chọn đề tài 1.2 Mục đích nghiên cứu 1.3 Đối tượng nghiên cứu 1.4 Phương pháp nghiên cứu Nội dung sáng kiến kinh nghiệm 2.1 Cơ sở lý luận sáng kiến kinh nghiệm 2.2 Thực trạng vấn đề trước áp dụng sáng kiến kinh nghiệm 2.3 Các giải pháp sử dụng để giải vấn đề 2.3.1 Kiểu xâu C++ 2.3.2 Các dạng tập thường gặp 2.3.3 Một số tập áp dụng 2.4 Hiệu sáng kiến kinh nghiệm hoạt động giáo dục, với thân, đồng nghiệp nhà trường Kết luận, kiến nghị 3.1 Kết luận 3.2 Kiến nghị UAN VAN CHAT LUONG download : add luanvanchat@agmail.com UAN VAN CHAT LUONG download : add luanvanchat@agmail.com Mở đầu 1.1 Lý chọn đề tài Trong thời kỳ hội nhập, Công nghệ thông tin ngành mũi nhọn mang đến phát triển vượt bậc cho khoa học kỹ thuật Chính vậy, ngành công nghệ thông tin trở thành ngành học “hot” thu hút nhiều bạn học sinh tốt nghiệp trung học phổ thông, đặc biệt bạn yêu thích máy tính đam mê công nghệ Tuy nhiên thực tế trường trung học phổ thơng mơn Tin học đa số học sinh xem “môn phụ” dành quan tâm cho mơn học Vì để góp phần khẳng định vai trị môn Tin học trường so với môn học khác tạo điểm nhấn kích thích quan tâm, hứng thú học sinh với mơn Tin việc nâng cao chất lượng đội tuyển học sinh giỏi nhiệm vụ trọng tâm Trên thực tế, ngoại trừ trường chuyên trường trung học phổ thông khác ngôn ngữ sử dụng chủ yếu để dạy cho đội tuyển học sinh giỏi tin học ngôn ngữ Pascal Tuy nhiên kỳ thi học sinh giỏi Tỉnh ngơn ngữ C++ ngôn ngữ sử dụng thay dần ngơn ngữ lập trình Pascal Vì để em học sinh đội tuyển học sinh giỏi Tin học nhà trường tiếp cận ngơn ngữ lập trình C++ vấn đề cấp thiết Đây thuận lợi cho em có định hướng học ngành cơng nghệ thơng tin bậc đại học dễ tạo hứng thú học tập cho em Qua hai năm bồi dưỡng học sinh giỏi cấp tỉnh việc cho học sinh sử dụng ngôn ngữ lập trình C++, tơi nhận thấy liệu kiểu xâu thường gặp phổ biến toán việc vận dụng linh hoạt thao tác xử lí kiểu liệu vào giải toán liên quan khơng phải dễ Bên cạnh tài liệu tham khảo phổ thơng thống ngơn ngữ lập trình C++ cịn hạn chế Vì vậy, 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, chọn đề tài “MỘT SỐ KINH NGHIỆM BỒI DƯỠNG HỌC SINH GIỎI VỀ KIỂU DỮ LIỆU XÂU TRONG NGƠN NGỮ LẬP TRÌNH C++” làm đề tài sáng kiến kinh nghiệm 1.2 Mục đích nghiên cứu - Giới thiệu số thao tác xử lí xâu c++ - Hệ thống số dạng tập thường gặp giúp học sinh giáo viên phần nhận dạng số tập liên quan 1.3 Đối tượng nghiên cứu - Các toán liên quan đến kiểu kiệu xâu 1.4 Phương pháp nghiên cứu - Khảo sát, phân tích, giải vấn đề kết hợp lí thuyết thực hành - Kết hợp thực tiễn dạy đội tuyển học sinh giỏi trường trung học phổ thông Vĩnh Lộc - Tham khảo tài liệu ngơn ngữ lập trình C++ tài liệu sáng kiến - Tham khảo ý kiến góp ý đồng nghiệp UAN VAN CHAT LUONG download : add luanvanchat@agmail.com Nội dung sáng kiến kinh nghiệm 2.1 Cơ sở lí luận sáng kiến kinh nghiệm Trong điều kiện hướng tới thực chương trình GDPT (2018), trước tình hình thực tế Bộ giáo dục đào tạo ban hành công văn 3280/BGDDT-GDTrH, kèm theo hướng dẫn điều chỉnh nội dung dạy học cấp trung học phổ thông năm 2020 Đối với việc giảng dạy nội dung ngơn ngữ lập trình mơn Tin học lớp 11, Bộ có số lưu ý cụ thể “Hiện có nhiều ngơn ngữ lập trình có tính cập nhật, đại, đồng thời thông dụng giáo dục phổ thông nhiều nước mà trường lựa chọn Python, C, C+ +, “ Trong ngơn ngữ lập trình C++, kiểu liệu xâu thường có hai loại với thao tác sử dụng với hai loại khác Vấn đề quan trọng tùy thuộc vào yêu cầu toán cụ thể, làm để học sinh phân loại dạng toán sử dụng kiểu liệu phù hợp, thuận lợi cho trình lập trình 2.2 Thực trạng vấn đề trước áp dụng sáng kiến kinh nghiệm Qua thực tế dạy bồi dưỡng đội tuyển học sinh giỏi, nhận thấy đề thi học sinh giỏi tỉnh qua năm địa phương hầu hết có tốn liên quan đến kiểu liệu xâu Bên cạnh bắt tay vào giải toán học sinh thường gặp khó khăn sử dụng thao tác với kiểu liệu nhiều lần nhầm lẫn thao tác kiểu xâu theo phong cách C kiểu xâu theo phong cách C++ 2.3 Các giải pháp sử dụng để giải vấn đề 2.3.1 Kiểu xâu C++ Trong C++ có hai loại xâu, xâu theo phong cách C (C – style string) xâu theo phong cách C++ (C++ - style string) C - Style string thực mảng ký tự, có số hàm khác sử dụng cho xâu, ví dụ thêm vào xâu, tìm chiều dài xâu, hàm kiểm tra phù hợp string với biểu thức quy (regular expression) C++ - Style string thực chất mảng ký tự, sử dụng dấu nháy kép để dánh dấu xâu kí tự (string literals) 2.3.1.1 C – style string 2.3.1.1.1 Khai báo char st[] = { 'h', 'e', 'l', 'l', ' ', 'o', ' ' ,'w', 'o', 'r', 'd', '\0'}; char st[] = "Hello word''; char st[100]; 2.3.1.1.2 Một số hàm thông dụng UAN VAN CHAT LUONG download : add luanvanchat@agmail.com char *strcpy(char *dest, const char *src) int strcmp(const char *str1, const char *str2) char *strcat(char *st1, const char *st2) char *strchr(const char *str, int c) int atoi(const char * str); Itoa(int n, char *st, số) 2.3.1.2 C++ - style string 2.3.1.2.1 Khai báo String st; // khai báo xâu st 2.3.1.2.2 Khởi tạo gán giá trị Có thể khởi tạo gán giá trị cho biến string theo nhiều cách: string st(""); // Khởi tạo xâu st rỗng string st1("Hello"); // Khởi tạo xâu "Hello" cho st1 string st2 = "hello word"; // Khởi tạo xâu "Hello A1" cho st2 string st= "88"; // Khởi tạo xâu "88" cho st, số 2.3.1.2.3 Xuất xâu kí tự coutn; Cin.ignore(32767,’\n’); // Xóa khỏi nhớ đệm 32767 kí tự đến gặp kí tự ‘\n’ xuống dòng Getline(cin,st1); Nhập văn bao gồm kí tự xuống dịng string st; getline(cin, st, '_'); // Nhập văn nhiều dịng gặp kí tự dấu gạch ‘_’ 2.3.1.2.5 Một số thao tác Tên hàm st.length() st=st1+st2; UAN VAN CHAT LUONG download : add luanvanchat@agmail.com st.at(vt); st1st2 St.find(s) St.find(s,x) st.erase(x, y); st.substr(x,y) 2.3.2 Các dạng tập thường gặp 2.3.2.1 Xử lí số nguyên lớn Phương pháp chung: Để thực phép tính xử lý với số nguyên phạm vi biểu diễn cung cấp, cách đơn giản sử dụng xâu kí tự để biểu diễn với ký tự xâu tương ứng với chữ số số nguyên lớn tính từ trái qua phải Bài 1: Cộng hai số nguyên lớn Cho hai số nguyên dương lớn có có độ dài không 200 chữ số Hãy đưa tổng số nguyên Ý tưởng: Sử dụng xâu để lưu số lớn Bước 1: Chuẩn hóa hai xâu để có độ dài Nếu xâu ngắn thêm kí tự ‘0’ vào đầu xâu Bước 2: Duyệt từ cuối hai xâu đầu: - Tách phần tử hai xâu chuyển sang kiểu số - Tính tổng: Tổng= số + số + nhớ ( ban đầu nhớ =0) Nhớ=tổng/10 Tong =tong % 10; - Chuyển đổi tổng tính sang dạng sơ cộng vào xâu kết - Lưu ý cộng thêm giá trị nhớ lần cuối gia trị nhớ khác Đoạn chương trình tính tổng hai số ngun lớn String congxau(string a, string b) { String c; Long n1=a.length(), long n2=b.length(), i, nho=0, tong; If (n1>n2) b.insert(0,n1-n2,’0’); If (n10;i ) { tong=(a[i]-48)+(b[i]-48)+nho; UAN VAN CHAT LUONG download : add luanvanchat@agmail.com nho=tong/10; tong=tong%10; c[i]=char(tong+48);} If (nho>0) c=char(nho+48)+c; Return c; } Bài 2: Nhân số nguyên lớn với số nguyên nhỏ Ý tưởng - Duyệt từ cuối xâu lớn đầu xâu - - Tách phần tử xâu chuyển sang kiểu số tính tích Tich=số nhỏ*tg-nhớ (tg số tách từ xâu lớn) Nhớ=tich/10; Tich=tich%10 - Chuyển đổi giá trị tích tính sang kí tự gán cho xâu kết - Lưu ý cộng thêm giá trị nhớ lần cuối nhớ khác ‘0’ Đoạn chương trình tham khảo String nhan1so(string a, int k) { String b; Long i,nho=0, tich; For (i=a.length();i>=0,i ) { tich=nho+(a[i]-48)*k; nho=tich/10; tich=tich%10; b=b+char(tich+48); } If (nho !=0) b=char(nho+48)+b; While (b.length()>1 && b[0]==’0’) b.erase(0,1); Return b; } Bài 3: Nhân hai số nguyên lớn Cho hai số ngun dương lớn a, b có có độ dài khơng 200 chữ số Hãy đưa tích số nguyên Ý tưởng: - Duyệt từ cuối xâu s đầu xâu - Tách phần tử xâu a nhân với xâu b - Cộng liên tiếp kết thu (lưu ý trước cộng xâu thêm kí tự ‘0’ vào cuối xâu thứ hai) - Xử lí kí tự ’0’ trước xâu sau cộng 2.3.2.2 Biến đổi xâu UAN VAN CHAT LUONG download : add luanvanchat@agmail.com Phương pháp chung: Đây dạng thường gặp, việc biến đổi xâu thực ký tự xâu nên cần nắm rõ thao tác kiểu liệu xâu để vận dụng cách linh hoạt vào tập cụ thể Bài 1: Tìm số lớn Cho dãy gồm N kí tự có mặt bàn phím có chữ số (N>s; for (int i=0; i