Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 22 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
22
Dung lượng
233,97 KB
Nội dung
SỞ SỞ GIÁO GIÁO DỤC DỤC VÀ VÀ ĐÀO ĐÀO TẠO TẠO THANH THANH HOÁ HOÁ TRƯỜNG TRƯỜNG THPT THPT VĨNH VĨNH LỘC LỘ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 LUAN 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ị Trang 1 1 2 2 13 16 17 17 17 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com LUAN 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 tố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 LUAN 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ó toán liên quan đến kiểu liệu xâu Bên cạnh bắt tay vào giải tố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 của 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 Tên hàm Mô tả size_t strlen(const char *str) Tính tốn độ dài xâu, khơng tính ký tự kết thúc (ký tự null) LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com char *strcpy(char const char *src) *dest, Sao chép xâu 'src' sang cho 'dest' int strcmp(const char *str1, So sánh hai string cho tham số trỏ const char *str2) str1, str2 Nó trả số nguyên > nghĩa str1 > str2 Và = nghĩa xâu giống nhau, ngược lại str1 < str2 char *strcat(char *st1, const Nối xâu st2 vào cuối xâu st1 char *st2) char *strchr(const char *str, Vị trí xuất xâu str xâu int c) strchr vị trí c int atoi(const char * str); Chuyển đổi xâu thành số nguyên Itoa(int n, char *st, số) Chuyển đổi số nguyên thành xâu 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, khơng phải 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 Mô tả st.length() Độ dài xâu st st=st1+st2; Nối xâu st2 vào cuối xâu st1 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com st.at(vt); Lấy kí tự vị trí vt xâu st st1st2 So sánh hai xâu st1 st2 St.find(s) Trả vị trí tìm thấy xâu s trong xâu st St.find(s,x) Trả vị trí tìm thấy xâu s trong xâu st vị trí x st.erase(x, y); Xóa y kí tự xâu st vị trí x st.substr(x,y) Trả xâu từ vị trí thứ x đến y xâu st 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ố ngun ngồi 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ố ngun dương lớn có có độ dài khơng q 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ố nguyên 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; LUAN 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 LUAN 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