Học một NNLT mỗi năm Học một ngôn ngữ lập trình mỗi năm sẽ làm thay đổi cách tư duy lập trình cho bạn... Nhìn lại các đoạn code trong quá khứ Nhìn lại các đoạn code bạn viết trong quá
Trang 1Kỹ năng biên soạn chương trình
Trang 32 Không ngừng học hỏi
Điều quan trọng nhất là không bao giờ ngừng học hỏi Luôn cố gắng để thực hiện cải thiện khả năng của mình
Trang 43 Học một NNLT mỗi năm
Học một ngôn ngữ lập trình mỗi năm sẽ làm thay đổi cách tư duy lập trình cho bạn
Trang 53 Nhìn lại các đoạn code trong quá khứ
Nhìn lại các đoạn code bạn viết trong quá khứ và nhận ra nó
tồi tệ như thế nào Như Churchill từng nói: “Những người
không học hỏi từ quá khứ chắc chắn sẽ lặp lại nó!”
(phân tích sai lầm của học sinh)
Trang 64 Lập trình cùng với bạn bè
Lập trình cùng với một lập trình viên khác có thể làm tăng chất lượng đoạn code của mình, mở rộng tầm nhìn của bạn, và giúp bạn làm việc như là một thành viên của nhóm
(sắp tới học lý thuyết trò chơi)
Trang 75 Đọc và suy ngẫm về code
Đọc và suy ra code được viết bởi những người khác nhau sẽ làm cho bạn có những suy nghĩ khác về code của mình Viết tài liệu cho code của người khác Nó giúp bạn hiểu cách người khác nghĩ và lập trình, giải thích một vài điều khiến bạn tìm thấy những lỗ hổng kiến thức của mình
Trang 8 Tải về các tài liệu trên mạng
Đọc sách các thầy cô giới thiệu
Trang 97 Các diễn đàn về C++
Tham gia các diễn đàn về lập trình
Trang 10Chủ đề cần giao
Cách viết code trong C++ hiệu quả (ví dụ: dùng hàm thay cho đoạn lệnh nào?, dùng define thay cho một câu, dùng hàm thay thế cho một đoạn lệnh, lấy ví dụ, …………)
Cách tạo ra bộ test nhanh để chấm trên themis bằng C++
Tìm hiểu sâu về cách gỡ rối khi biên soạn chương trình bằng C++ (ví dụ kiểm tra đoạn chương trình con như thế nào, kiểm tra giá trị các biến trong C++ như thế nào)
Tìm hiểu về các thư viện trong C++, và một vài ứng dụng giúp tăng hiệu quả trong việc viết code bằng c++
Đề tài mở do học sinh tự nghĩ ra (liên quan đến việc code trong c++ hiệu quả nhất, hay sai lầm thường gặp khiến tốc độ
chương trình chậm,……)
Một tuần chuẩn bị, tuần từ 28.02 báo cáo lấy điểm một tiết
Trang 11 Gồm 6 nhóm, tự chọn, mỗi nhóm từ 5-6 người, chọn một chủ
đề thích hợp, có thể trùng nhau, nhưng chất lượng phải cao
Nộp bản slide, và bản word chi tiết (cỡ chữ 13.5, dãn dòng 1.5, căn lề đẹp)
Chọn ra một nhóm trưởng, gửi bản phân công công việc cho giáo viên chủ nhiệm
Lớp trưởng lập danh sách nhóm, gửi về cho các thành viên
Chấm điểm nhóm dựa trên các tiêu chí: người thuyết trình,
chất lượng của slide thuyết trình, tinh thần làm việc của cả
nhóm, nhóm trưởng được ưu tiên về điểm từ 0.5 đến 1 điểm tùy cách làm việc
Trang 121 Khởi tạo biến trong C++
Khởi tạo các mảng toàn bằng 0
Trang 131 Khởi tạo biến trong C++
Cách 1 Dùng vector (sự thay thế quá linh hoạt của mảng)
Trang 142 C++ nhanh hay chậm hơn C?
Cin, cout trong C++ hay là printf và scanf trong C?
Trang 152 C++ nhanh hay chậm hơn C
Cin, cout trong C++ hay là printf và scanf trong C?
Mặc định, cin/cout sẽ mất thời gian để đồng bộ hóa chúng với thư viện stdio của ngôn ngữ lập trình C, với mục đích bạn có thể gọi lẫn lộn giữa cin/cout với printf/scanf Vậy ta sẽ tắt việc
Trang 163.Khai báo số phần tử của mảng
Có thể khai báo số phần tử của mảng tùy ý không?
Giả sử cho khai báo mảng int a[10], một biến kiểu dữ liệu int,
máy tính phải cấp phát một vùng nhớ là 4byte (4B), nhân với
10 biến sẽ bằng 40B Do vậy máy tính sẽ cấp phát vùng nhớ là 40B cho khái báo a[10]
Tương tự, với khai báo long long a[1000000], mỗi biến kiểu long long, máy tính phải cấp phát vùng nhớ là 8byte (8B), nhân với
10 mũ 6 là 8 nhân 10^6 B
1GB=2^30 B= 1073741824 xấp xỉ 10^9B
Trang 173 Khai báo số phần tử của mảng
Tương tự, với khai báo long long a[100000000], mỗi biến kiểu long long, máy tính phải cấp phát vùng nhớ là 8byte (8B), nhân với 10 mũ 8 là 8*10^8
1GB xấp xỉ 10^9 và bằng 1073741824B
Vậy chỉ cần khai báo thêm một mảng b[100000000], ta sẽ có 16*10^8=1600000000> 1073741824B hay lớn hơn 1GB
Trang 183 Giới hạn bộ nhớ trên themis
Câu hỏi 1 Tại sao đề thi nước ngoài có giới hạn bộ nhớ cho mỗi bài, mà đề thi Việt Nam lại ít khi thấy?
Mặc định trên phần mềm Themis là 1GB
Trang 20Vấn đề xử lý xâu trong C++
Trong Pascal ví dụ về kí tự và xâu
‘a’, ‘A’, ‘0’, ‘9’, ‘lop 10 tin’
Trong C++ phân biệt kí tự và xâu
Kí tự thì viết giống như Pascal ‘a’, ‘A’, ‘0’,’9’
Nhưng xâu trong C++ (string) thì viết là “lop 10 tin”
Trang 22Vấn đề xử lý xâu trong C++
Chuyển kí tự trong C++ thành số
Cách 1 Trừ cho kí tự ‘0’
Ví dụ: ‘9’ –’0’ chính bằng số 9 vì số thứ tự trong mã ASCII của ‘9’ là 57, số thứ tự trong bảng mã ASCII của ‘0’ là 48
Cách 2 Lấy luôn kí tự trừ đi số 48
Ví dụ string s=“9321”;
Cout<<s[0]-48
Trang 23cout<<c<<'\n'; //dua ra gia tri la ky tu 2
cout<<c+3;//dua ra gia tri la so 53
return 0;
}
Cách 2 Cộng số đó với 48, gán vào kí tự cần chuyển
Trang 24 Chuyển từ mảng các kí tự thành số (thư viện stdlib.h)
atoi(str) chuyển đổi mảng các kí tự thành một số int
atol(str) chuyển đổi mảng các kí tự thành một số long
atof(str) chuyển đổi mảng các kí tự thành một số float
Trang 26Vấn đề xử lý xâu trong C++
Chuyển từ số sang mảng các kí tự
itoa(value, str, cơ số) chuyển đổi số int thành mảng các kí tự
lltoa(value, str, cơ số) chuyển đổi số long long thành mảng các
kí tự
Trang 27 long long a=1234500000000000000;
char x[21];
lltoa(a,x,10);
cout<<x;
return 0;
Trang 28Vấn đề xử lý xâu trong C++
Chuyển từ xâu thành số trong C++
Cách 1 Chuyển từ xâu thành mảng các kí tự, rồi từ mảng các
kí tự đó dùng hàm để chuyển thành số
(Để chuyển xâu thành mảng các kí tự ta dùng hàm s.c_str(),
với s là biến xâu)
Cách 2 Dùng đến lớp stringstream
Trang 29Chuyển từ xâu sang số (cách 1)
Trang 30Chuyển từ xâu sang số (cách 2)
Trang 31 Chuyển từ số sang xâu trong C++
Cách 1 Chuyển từ số sang mảng các kí tự (dùng hàm), rồi
chuyển mảng các kí tự này thành xâu lúc khai báo biến xâu
Cách 2 Dùng đến lớp stringstream
Trang 32 { long long a=1000000000000000000;
char x[21]; // mang cac ki tu
lltoa(a,x,10);//bien doi so thanh mang cac ki tu
string s(x);//khoi tao va chuyen mang ki tu thanh xau
cout<<s;
return 0;
Trang 33 { long long a=1230000000000000000;
char x[25]; // mang cac ki tu
lltoa(a,x,10);//bien doi so thanh mang cac ki tu
string s;//khoi tao va chuyen mang ki tu thanh xau
s=string(x);
cout<<s;
return 0;
}
Trang 36Thư viện <algorithm>
Hoán đổi giá trị hai biến a và b dùng hàm swap(&a,&b)
Trang 37Thư viện algorithm
Tìm giá trị min, max của hai số a và b
Trang 38Thư viện algorithm
Trang 39Thư viện algorithm
Nếu cần sắp một mảng các phần tử có kiểu struct thì cần
viết thêm hàm so sánh Ví dụ sắp xếp mảng PhanSo:
#include<algorithm> using namespace std;
struct PhanSo
{ long long ts; long long ms; };
PhanSo a[100005]; long long n;
bool SoSanh(const PhanSo &x, const PhanSo &y)
{ return (double)x.ts/x.ms < (double)y.ts/y.ms;}
Trang 40Thư viện algorithm
Hàm reverse: Đảo ngược thứ tự các phần tử trong khoảng [first,last)
Trang 41Đối tượng kiểu pair
#include <utility> // std::pair, std::make_pair
#include <string> // std::string
#include <iostream> // std::cout
using namespace std;int main ()
{ pair <string,double> product1;
pair <string,double> product2 ("tomatoes",2.30); // value init
pair <std::string,double> product3 (product2); // copy
constructor
product1 = make_pair("lightbulbs",0.99); // using make_pair(move)product2.first = "shoes"; // the type of first is string
product2.second = 39.90; // the type of second is double
cout << "The price of " << product1.first << " is $" <<