Thứ Hai, 31 tháng 7, 2017

1. Khái niệm chung
Tới bây giờ, chúng ta đã sử dụng thư viện chuẩn iostream, cung cấp các phương thức cin và cout để đọc từ bàn phím và in ra màn hình.
Việc đọc và ghi dữ liệu vào file sử dụng các lớp sau của C++: lớp fstream là lớp dẫn xuất từ 2 lớp ofstream và ifstream. Lớp ofstream là lớp dẫn xuất từ các lớp ios, ostream, fstreambase. Lớp ifstream là lớp dẫn xuất từ các lớp ios, istream, fstreambase.
Kiểu dữ liệu
Miêu tả
ofstream
Kiểu dữ liệu này biểu thị dòng xuất ra tệp và được sử dụng để tạo tệp và để ghi thông tin vào tệp
ifstream
Kiểu dữ liệu này biểu thị dòng nhập tệp và được sử dụng để đọc thông tin từ tệp
fstream
Kiểu dữ liệu này có các khả năng của cả ofstream và ifstream, nghĩa là nó có thể tạo file, ghi thông tin vào file và đọc thông tin từ file
Để xử lý file trong C++ đầu chương trình cần các lệnh #include <iostream> và #include <fstream>
2. Mở một File
Một file phải được mở trước khi đọc thông tin từ nó hoặc ghi thông tin tới nó. Đối tượng của lớp ofstream hoặc fstream được dùng để mở một file để ghi, đối tượng của lớp ifstream được sử dụng để mở file với mục đích đọc.
Cú pháp cho hàm open(), là một thành viên của các đối tượng thuộc lớp fstream, ifstream và ofstream
void open(const char *ten_file, ios::che_do);
Tham số đầu tiên xác định tên và vị trí của file được mở, tham số thứ hai của hàm open() xác định chế độ file được mở.



Chế độ
Miêu tả
ios::app
Tất cả dữ liệu xuất tới tệp được bổ sung vào cuối tệp
ios::ate
Mở tệp để xuất và di chuyển điều khiển đọc / ghi vào cuối tệp
ios::in
Mở một file để đọc
ios::out
Mở một file để ghi
ios::trunc
Nếu file này đã tồn tại, nội dung của nó sẽ được xóa trước khi mở file
Ios::binary
Đọc/Ghi theo kiểu nhị phân, ngầm định là theo kiểu văn bản
Ios::nocreate
Nếu tệp chưa có thì không làm gì
Ios::noreplace
Nếu tệp đã có thì không làm gì
Bạn có thể kết hợp hai hoặc nhiều giá trị này bằng cách sử dụng dấu vạch đứng (|). Ví dụ,  bạn muốn mở một file để xuất và muốn xóa nó nếu nó đã tồn tại:
ofstream f;
f.open("file.dat", ios::out | ios::trunc );
3. Đóng một File
Hàm close() là một thành viên của đối tượng thuộc các lớp fstream, ifstream và ofstream dùng để đóng file
4. Ghi File
Sử dụng toán tử (<<) của đối tượng thuộc lớp ofstream hoặc fstream 
5. Đọc một File
Sử dụng toán tử (>>) của đối tượng thuộc lớp ifstream hoặc fstream 
6. Di chuyển con trỏ tệp
Cả hai lớp istream và ostream đều cung cấp hàm để xác định lại vị trí của con trỏ tệp: seekg (viết tắt của seek get) cho istream và seekp (viết tắt của seek put) cho ostream.
Tham số cho seekg và seekp thường là một số nguyên kiểu long int xác định số byte cần di chuyển. Tham số thứ hai xác định điểm xuất phát của việc di chuyển. Điểm xuất phát có thể  là đầu tệp ios::beg (mặc định), có thể là từ vị trí hiện hành của con trỏ ios::cur, có thể là từ cuối tệp  ios::end.
f.seekg( n );                 //  xuất phát từ đầu tệp di chuyển n byte
f.seekg( n, ios::cur );   //  xuất phát từ vị trí hiện tại của con trỏ tệp di chuyển n byte
f.seekg( n, ios::end );  // xuất phát từ cuối tệp di chuyển n byte
f.seekg( 0, ios::end );  //  đặt con trỏ vào cuối tệp
7. Chương trình minh họa
Bước 1. Tạo 1 file văn bản dulieu.txtchứa dữ liệu về các học sinh:
3
Bui Van Tan
2002  7.5   8   10
Le Binh
2003  8  9  10
Tran Binh Trong
2001  5.5   6.5   7.5
Tệp dữ liệu có thể nhập trực tiếp từ 1 trình soạn thảo văn bản.

Bước 2. Đọc dữ liệu từ tệp văn bản lưu vào 1 mảng cấu trúc.

Thứ Sáu, 28 tháng 7, 2017

1. Chương trình 1 minh hoạ cách làm việc của phương thức tĩnh: khai lớp cơ sở là xeco (xe cộ) và 3 lớp dẫn xuất từ nó là xecon, xetai và tauthuy (xe con, xe tải, tàu thuỷ). Khi khai báo các lớp dẫn xuất đều có từ public, điều đó làm cho các lớp dẫn xuất thừa kế các phương thức của lớp cha. Lớp xeco, xecon và tauthuy đều có phương thức thongbao (trùng tên, trùng số đối, kiểu của đối và giá trị trả về).
Tất cả các phương thức trong chương trình đều là phương thức tĩnh. Lời gọi tới phương thức tĩnh bao giờ cũng xác định rõ phương thức nào được gọi trong số các phương thức trùng tên của các lớp có quan hệ thừa kế theo quy tắc sau:
           ·          Nếu lời gọi xuất phát từ một đối tượng của lớp nào  thì phương thức của lớp đó sẽ được gọi (xem dòng 44, 45, 47), nếu không thấy thì sẽ tìm ở lớp cha (dòng 46, 52: do lớp xetai không có phương thức thongbao() nên phương thức thongbao() của lớp cha được gọi).
           ·          Nếu lời gọi xuất phát từ một con trỏ kiểu lớp nào thì phương thức của lớp đó sẽ được gọi bất kể con trỏ chứa địa chỉ của đối tượng nào (xem dòng 50, 51, 53). Các dòng 56-61 đều dùng phương thức thongbao() của lớp cha vì p là con trỏ kiểu lớp xeco. 
Dòng 42 minh hoạ một nguyên tắc quan trọng: con trỏ của lớp cơ sở có thể dùng để chứa địa chỉ các đối tượng của lớp dẫn xuất.

2. Cách định nghĩa phương thức ảo. Trong Chương trình 1 ở trên ta có phương thức thongbao() ở cả 3 lớp xeco, xecon, tauthuy với tính chất: trùng tên, trùng kiểu, trùng số đối  và kiểu của đối. Để chuyển cả 3 phương thức này thành ảo ta chỉ cần thêm từ khoá virtual vào trước phương thức thongbao() thuộc lớp cơ sở, tức là dòng 8 trở thành:
virtual void thongbao(void){cout<<"Thong bao cua lop xeco\n";}
hoặc dùng cách thứ hai: thêm từ khoá virtual vào cả 3 phương thức thongbao() của 3 lớp. Ta gọi Chương trình 1 sau khi đã thêm từ virtual vào  dòng 8 là Chương trình 2
Quy tắc gọi phương thức ảo. Phương thức ảo chỉ khác phương thức tĩnh khi được gọi từ một con trỏ. Lời gọi phương thức ảo từ một con trỏ chưa cho biết rõ phương thức nào trong số các phương thức ảo trùng tên của các lớp có quan hệ thừa kế sẽ được gọi. Điều này phụ thuộc vào đối tượng cụ thể mà con trỏ đang trỏ tới: con trỏ đang trỏ tới đối tượng của lớp nào thì phương thức của lớp đó sẽ được gọi (đó chính là sự liên kết động).  Theo quy tắc đó các dòng 56 - 61 của Chương trình 2 sẽ in ra:  “Thông báo cua lop xeco, Thông báo cua lop xecon, Thông báo cua lop xeco, Thông báo cua lop tauthuy, Thông báo cua lop xecon”. Các dòng 44-47, 50-53 vẫn in kết quả như cũ.

Ta nhận thấy cùng một câu lệnh p->thongbao() ở các dòng 56 - 61 nhưng nó tương ứng với nhiều phương thức khác nhau, đây chính là tương ứng bội. Khả năng này rõ ràng cho  phép xử lý nhiều đối tượng khác nhau, nhiều công việc, thậm chí nhiều thuật toán khác nhau theo cùng một cách thức, cùng một lược đồ.

Thứ Năm, 27 tháng 7, 2017

j2team-cookies-chrome-extension

J2TEAM Cookies là  một extension tớ code cho ông anh dùng cơ mà nhân tiện up lên Chrome Store luôn để cho mọi người cùng sử dụng. Nó giúp các bạn có thể chia sẻ tài khoản trực tuyến cho người khác mà không cần tiết lộ mật khẩu.

Với mục đích như trên, chắc hẳn trong đầu các bạn đang nghĩ tới một extension khác khá phổ biến là Access URL đúng không? Vậy câu hỏi được đặt ra ngay lúc này là...
Read More

Chủ Nhật, 23 tháng 7, 2017

Thứ Bảy, 22 tháng 7, 2017

1. Khai báo lớp:
class tên_lớp
{      kểu  tên_biến;
       khai báo các hàm (phương thức, method);
}
Khai báo 1 đối tượng (object):    tên_lớp tên_đối_tượng;

2. Từ khóa private. Mặc định các biến là private: ngoài lớp không truy nhập được. Các hàm thuộc private thì ở ngoài lớp cũng không gọi được.

3. Từ khóa public: các biến và hàm thuộc public thì được phép dùng ở ngoài class.

4. constructor (hàm tạo): trùng tên với tên lớp, gọi tự động khi đối tượng được khai báo, tránh dùng các đối tượng chưa được khởi tạo, có thể khởi tạo cho các biến, có thể chỉ đơn giản là khởi tạo mỗi biến lớp thành 0 để tránh rác. Hàm tạo có kiểu trả về là 1 con trỏ trỏ tới đối tượng vừa khai báo. Có thể có nhiều hàm tạo khác nhau bởi số tham số và kiểu (chồng các hàm trong lớp).


5. destructor (hàm hủy): có tên trùng với tên lớp nhưng phía trước thêm dấu ngã, tự động gọi khi 1 đối tượng kết thúc phạm vi hoạt động (khi khối khai báo nó kết thúc), hàm không có kiểu trả về. Nếu có cấp phát bộ nhớ động cho đối tượng thì hàm hủy thường làm nhiện vụ xóa vùng nhớ đã cấp phát.

Thứ Sáu, 21 tháng 7, 2017

Với những bài toán cần nhập nhiều dữ liệu, nhất là các bài toán thực tế, ta không thể nhập dữ liệu từ bàn phím được, ví dụ nhập một ma trận 100 hàng 100 cột. Trong các kỳ thi học sinh giỏi trong nước và quốc tế đề bài luôn yêu cầu nhập dữ liệu từ các tệp văn bản, in kết quả tính toán ra tệp văn bản theo các định dạng quy định trước để thuận tiện cho việc chấm bài.

Các lệnh dùng:
#include <fstream>  // lớp dùng để đọc ghi dữ liệu
ifstream tep1;           //  tạo 1 dòng nhập từ tệp là đối tượng của lớp ifstream
tep1.open("matran.cpp");   //  mở tệp và gắn với dòng nhập
tep1 >> biến_số;                //  nhập các số từ tệp văn bản, giống cin >>
tep1.close();                       //  đóng tệp 
ofstream tep2;                      //  tạo 1 dòng xuất ra tệp, là 1 đối tượng của lớp ofstream
tep2.open("ketqua.cpp");     //  mở tệp và gắn với dòng xuất ra tệp
tep2 << biến;                       //  in biến ra tệp văn bản
tep2.close();

Ví dụ: nhập dữ liệu mảng 2 chiều (ma trận) từ 1 tệp văn bản. Tính tổng các phần tử. In mảng đã nhập, tổng các phần tử ra 1 tệp văn bản và ra màn hình.
Bước 1. Soạn tệp văn bản matran.cpp: New – File – Text file, soạn thảo và ghi vào  thư mục d:\
Bước 2. Lập trình và biên dịch thành tệp proj49.exe. Copy tệp này vào thư mục d:\
Bước 3. Ấn phím Windows + R, chạy lệnh cmd để hiện dấu nhắc lệnh. Về thư mục gốc ổ D. Gõ lệnh:
D:\>proj49
Chương trình chạy, in kết quả ra màn hình và ra tệp ketqua.cpp
Bước 4. Mở tệp ketqua.cpp để xem và in ra giấy nếu muốn



Thứ Ba, 18 tháng 7, 2017


Nhúng bản đồ hoặc chia sẻ vị trí

Trên máy tính, bạn có thể nhúng bản đồ, hình ảnh Chế độ xem phố, chỉ đường lái xe hoặc tìm kiếm vào trang web hoặc blog của mình. Trên máy tính, điện thoại hoặc máy tính bảng, bạn có thể chia sẻ vị trí hoặc bản đồ với những người khác qua email, Google+, Facebook, Twitter hoặc tin nhắn.


Nhúng bản đồ hoặc chỉ đường

Để nhúng bản đồ hoặc chỉ đường trong trang web hoặc blog, hãy thực hiện theo các bước dưới đây.
  1. Mở Google Maps.
  2. Đảm bảo bản đồ, hình ảnh Chế độ xem phố hoặc chỉ đường mà bạn muốn nhúng xuất hiện trên bản đồ.
  3. Ở góc trên cùng bên trái, nhấp vào Menu .
  4. Nhấp vào Chia sẻ hoặc nhúng bản đồ.
  5. Ở trên cùng của hộp xuất hiện, hãy chọn Nhúng bản đồ.
  6. Chọn kích thước bạn muốn, sau đó sao chép mã nhúng HTML và dán mã đó vào mã nguồn của trang web hoặc blog.
Lưu ý:
  • Nếu đang sử dụng Maps ở chế độ Lite, thì bạn sẽ không thể nhúng bản đồ.
  • Thông tin giao thông và các thông tin khác của Maps có thể không khả dụng trong bản đồ được nhúng.

Chia sẻ bản đồ hoặc vị trí

Để chia sẻ liên kết đến bản đồ của bạn với những người khác, hãy thực hiện theo các bước dưới đây.
  1. Mở Google Maps.
  2. Đảm bảo bản đồ, hình ảnh Chế độ xem phố hoặc chỉ đường mà bạn muốn chia sẻ xuất hiện trên bản đồ.
  3. Khi bạn đã sẵn sàng chia sẻ, hãy nhấp vào Menu .
  4. Chọn Chia sẻ hoặc nhúng bản đồ. Nếu bạn không thấy tùy chọn này, hãy nhấp vào Liên kết đến bản đồ này.
  5. Tùy chọn: Để tạo liên kết trang web ngắn hơn, hãy chọn hộp bên cạnh "URL ngắn".
  6. Sao chép và dán liên kết ở bất cứ nơi nào bạn muốn chia sẻ bản đồ, như email hoặc bài đăng trên Google+.
Mẹo: Bạn cũng có thể sao chép địa chỉ web từ thanh địa chỉ của trình duyệt trong tất cả các trình duyệt ngoại trừ Internet Explorer 8 hoặc 9.

Nội dung bạn có thể chia sẻ và không thể chia sẻ

Nội dung bạn có thể chia sẻ:
  • Địa điểm, doanh nghiệp hoặc địa chỉ
  • Tìm kiếm chỉ đường
  • Hình ảnh Chế độ xem phố
Nội dung bạn không thể chia sẻ:
  • Bản đồ có lưu các vị trí riêng tư
  • Bản đồ có số đo khoảng cách
  • Một ảnh chụp màn hình hoặc hình ảnh của bản đồ

Thứ Hai, 17 tháng 7, 2017

Chủ Nhật, 16 tháng 7, 2017

1. Union
Dữ liệu union (hợp) gồm nhiều thành phần và các thành phần được cấp phát một vùng nhớ chung. Kích thước của union là kích thước của thành phần lớn nhất. Một thành phần của union có thể là một cấu trúc, một cấu trúc có thể có các thành phần là union. Cách định nghĩa một kiểu union, khai một biến union, mảng union, cách truy nhập tới các thành phần union giống với dữ liệu kiểu struct.
Cách khai báo :
union [ten_union]
{   kieu1  ten_thanh_phan1;
    kieu2  ten_thanh_phan2;
    . . . . . . . .
}  [danh_sach_bien];
Sửa giá trị của một trong các thành phần sẽ ảnh hưởng tới các thành phần kia.
2. Union không có tên

Trong C chuẩn tất cả các union phải có tên để dùng, trong C++ có thể dùng union không có tên

Xét bài toán quản lý điểm một môn học của giáo viên đại học:
1. Nhập mảng cấu trúc từ bàn phím
2. In mảng cấu trúc ra màn hình dạng cột
3. Chèn 1 phần tử mới vào giữ mảng cấu trúc
4. Tìm kiếm và xóa 1 phần tử ở giữa mảng cấu trúc
5. In các bản ghi dưới dạng phiếu điểm
Bài tập
Bổ sung các chức năng sau vào chương trình:
1. Vào từ bàn phím 1 mã sinh viên, tìm kiếm trong danh sách sinh viên có mã này và in toàn bộ thông tin của sinh viên, nếu không có thì thông báo “Khong co sinh vien co ma nay”.
2. Vào từ bàn phím 1 mã sinh viên, tìm kiếm trong danh sách sinh viên có mã này và cho phép sửa lần lượt toàn bộ thông tin của sinh viên này, nếu không có thì thông báo “Khong co sinh vien co ma nay”.
3. Sắp xếp mảng a theo trường tbinhgiảm dần.
4. Sắp xếp mảng a theo trường hotentăng dần.
5. Đưa ra danh sách các sinh viên có điểm thi giữa kỳ và cuối kỳ đều lớn hơn hay bằng năm điểm.
6. Vào từ bàn phím một năm, ví dụ 2000. Liệt kê các sinh viên sinh vào năm này.

7. Nhập 2 mã sinh viên, nếu 2 mã này đều có trong danh sách thì đổi vị trí của 2 sinh viên này trong mảng 

Thứ Bảy, 15 tháng 7, 2017

1. Khai một mảng cấu trúc
svien a[100]; int n;
2. Truy nhập vào các trường của 1 phần tử có kiểu cấu trúc:
a[i].masv, a[i].tbinh
3. Duyệt qua một mảng cấu trúc và xử lý các trường:
for (i = 0; i< n; i++) { xử lý a[i].têntrường,... }
4. Con trỏ cấu trúc và mảng cấu trúc: dùng như mảng 1 chiều
svien *p;
p = a;
Truy nhập các phần tử của mảng cấu trúc cùng thành phần:
a[i].thanhphan
(*(a+i)).thanhphan
p[i].thanhphan
(*(p+i)).thanhphan

(p+i)->thanhphan

1. Tại sao dùng dữ liệu kiểu cấu trúc?
Tạo ra các kiểu dữ liệu mới không phải dữ liệu chuẩn của C++ (char, int, long int, float, double).
Biến mảng: gộp các biến cùng kiểu thành 1 biến. Biến cấu trúc: gộp các biến khác kiểu thành 1 biến.
2. Khai một kiểu cấu trúc:
struct [ tên cấu trúc ]
{
   định nghĩa thành phần;
   định nghĩa thành phần;
   . . . .
   định nghĩa thành phần;
} [ khai 1 hay nhiều biến cấu trúc ] ;                
Một trường có thể là 1 kiểu cấu trúc khác, có thể là 1 mảng số …
3. Dữ liệu kiẻu cấu trúc thường dùng cho các CSDL. Mỗi CSDL đều có Key (để tìm kiếm, khóa có thể là 1 trường, có thể nhiều trường). Ví dụ CSDL công dân Việt nam dùng để quản lý tòan bộ người dân gồm có các trường: Số căn cước công dân (key), Họ tên, Ngày sinh, Giới tính, Quốc tịch, Quê quán, Nơi thường trú, Đặc điểm, Ngày cấp CCCD.
4. Khai một biến cấu trúc     
5. Truy nhập các trường: dùng dấu chấm
6. Các biến cấu trúc cùng kiểu có thể gán cho nhau:
7. Cấu trúc đóng vai trò là đối của hàm
8. Con trỏ trỏ tới cấu trúc
struct Sach *p;
p = &quyen1;
p -> tensach

9. Dùng từ khóa  typedef 

1. Giả sử a và b là các bit, mỗi bit chứa số 0 hay 1.
Phép và theo bít viết là a & b: cho 1 nếu a = 1 và b = 1, các trường hợp khác cho kết quả 0.
Phép hoặc theo bit viết là a | b : cho 0 nếu cả a và b đều bằng 0, các trường hợp khác cho 1.
Phép hoặc loại trừ viết là a ^ b : cho 1 nếu a khác b, cho 0 nếu a giống b.
Phép lấy phần bù theo bít viết là ~a: cho 1 nếu a = 0, cho 0 nếu a = 1
2. Giả sử x có kiểu unsigned int gồm 4 byte, tức là có 32 bit
Phép dịch trái n bít  viết là x << n
Phép dịch phải n bít viết là x >> n
3. Ý nghĩa: dùng để can thiệp vào các ô nhớ và các thanh ghi của máy tính.

4. Các số đầu tiên của hệ 16

 

Thứ Sáu, 14 tháng 7, 2017

Dữ liệu enum nhằm tạo 1 danh sách các macro cho các hằng nguyên làm cho chương trình dễ hiểu và sáng sủa, nó thay thế cho 1 loạt các lệnh #define
1. Cú pháp khai báo:
enum <tên enum>
{
<tên hằng 1>,
<tên hằng 2>,
...
} ;
Sau từ khóa enum là tên kiểu liệt kê. Bên trong là các hằng số, mỗi một hằng số được cách nhau bằng dấu phẩy, riêng hằng số cuối cùng không có dấu phẩy. Tên hằng không được có khoảng trắng. Kết thúc enum phải có dấu chấp phẩy. Có thể tạo giá trị cho hằng số: nếu hằng số đầu tiên không được gán giá trị, thì giá trị mặc định là 0, mỗi giá trị tiếp theo tăng lên 1 (nếu không gán 1 giá trị khác) .
2. Phạm vi khai báo
Khai báo kiểu liệt kê bên trong hàm thì có thể sử dụng kiểu liệt kê đó bên trong hàm.

Khai báo kiểu liệt kê bên trong một file cpp và ngoài hàm, thì kiểu liệt kê đó có thể được sử dụng trong toàn file cpp.

Thứ Năm, 13 tháng 7, 2017

Cũng tương tự như việc truyền đối số cho hàm là tham chiếu, giá trị trả về khi dùng phương thức này phải là một biến (không thể trả về 1 giá trị cụ thể hay 1 biểu thức). Khi 1 giá trị trả về là tham chiếu, 1 tham chiếu sẽ được tạo ra và trả về cho lời gọi hàm. Chúng ta có thể sử dụng tham chiếu được trả về để tiếp tục thay đổi dữ liệu bên trong vùng nhớ được tham chiếu đến.

Ta nên trả về một tham chiếu thực sự khi sử dụng phương thức trả về này. Ví dụ:

int & NhanDoi( int &ref )
{
ref *= 2;
return ref;
}
int n = 100 ; n = NhanDoi(n); cout << n;

 Hàm NhanDoi trên có 1 tham số tham chiếu kiểu int, giá trị bên trong vùng nhớ được tham chiếu đến sẽ tăng gấp 2 lần sau khi gọi hàm. Một điểm đáng chú ý là ta trả về cho lời gọi hàm một tham chiếu thực sự, vì thế ta có thể tiếp tục sử dụng tham chiếu trả về để thay đổi giá trị.


 
1. Hàm chồng (function overloading)

C++ cho phép chồng các hàm, tức là các hàm khác nhau có thể trùng tên. Ví dụ:

int max( int x, int y);                     (1)
double max( double x, double y); (2)

Trình biên dịch sẽ dùng số lượng và kiểu của các tham số để phân biệt các hàm chồng. Các hàm chồng không phân biệt bới kiểu hàm, vì lúc gọi hàm không nhận biết được.

Khi 1 hàm được gọi, trình biên dịch sẽ so sánh các đối số với các tham số của các hàm chồng về số lượng và kiểu, sau đó gọi hàm phù hợp nhất.

Ví dụ: double z, x = 7.9; z = max(1.0, x); hàm (2) được gọi.

Khi không tìm thấy phiên bản nào có tham số phù hợp hoàn toàn, C++ sẽ tìm đến những phiên bản hàm mà đối số có thể phù hợp thông qua ép kiểu:

• Char, unsigned char, short sẽ được ép kiểu ngầm định sang int.

• Unsigned short có thể tự ép kiểu ngầm định sang int hoặc unsigned int, tùy vào kích thước của giá trị.

• Float có thể tự ép kiểu ngầm định sang double.

Ví dụ: double z, x = 7.9; z = max(1, x); số 1 là int nên chương trình báo lỗi ngay khi dịch.

2. Inline functions (hàm nội tuyến) là một loại hàm trong ngôn ngữ lập trình C/C++. Với việc sử dụng từ khoá inline, hàm này được sử dụng để đề nghị (không phải là bắt buộc) với trình biên dịch chèn code của hàm đó tại địa chỉ mà nó được gọi.

Nếu muốn sử dụng inline functions, chỉ cần đặt từ khoá inline ở trước một hàm bình thường lúc khai báo hoặc ở dòng đầu tiên của hàm lúc định nghĩa. Khi sử dụng ta cứ gọi nó ra như gọi một hàm bình thường.

Inline functions có ích trong việc tiết kiệm thời gian, tuy nhiên nếu sử dụng với các hàm có kích thước lớn có thể làm cho chương trình chạy chậm hơn. Do đó chỉ nên sử dụng inline với các chương trình nhỏ được gọi ra thường xuyên. Nếu hàm có chứa các biến static, các lệnh chu trình, lệnh goto, lệnh switch, hàm đệ quy chắc chắn từ khoá inline sẽ bị bỏ qua.


Thứ Tư, 12 tháng 7, 2017

Thầy bói, thầy phán thường là những người dự đoán chung chung trước về tương lai của bạn. Có một điều mình chia sẻ đó là bản thân mình chưa bao giờ đi xem bói và xem quẻ gì nên việc nhắc tới ông này xem chuẩn lắm thì mình cũng không cảm thấy bị kích thích. Tuy nhiên, việc rõ ràng rằng thầy bói hay thầy phán chỉ đưa ra tiêu chuẩn chung, khả năng chính xác thì không có cơ sở nên nếu muốn đúng theo những lời họ đưa ra thì hoàn toàn phụ thuộc vào bản thân của các bạn.

Dưới đây là những gì thầy phán, và nó thật là chuẩn không cần chỉnh :D Ảnh chế cực hài "Ngày xưa thầy phán..." DM THẦY

Ngày xưa xem bói thầy phán sau này quản lý 200 sinh mạng trong tay. Ờ thích thật, quản lý 1000 cũng được luôn :D
Ngày xưa xem bói thầy phán sau này quản lý 200 sinh mạng trong tay. Ờ thích thật, quản lý 1000 cũng được luôn :D
chi tiết
Hàm có tham số với giá trị ngầm định là một mở rộng khá thiết thực của C++ đối với C.

Cú pháp:

<kiểu hàm> <tên hàm> (ts1, ts2, ..,tsn, tsnd1 = gt1, tsnd2 = gt2,…, tsndm = gtm);

Các tham số với giá trị ngầm định phải được khai báo liên tục và xuất hiện cuối cùng trong danh sách tham số.

Một lời gọi bất kỳ đến hàm này đều phải có đầy đủ các tham số ứng với ts1,…, tsn (không phải tham số ngầm định). Nhưng có thể có hoặc không các tham số ngầm định ứng với tsnd1,…,tsndm. Nếu tham số nào không có thì nó sẽ tự động gán với giá trị ngầm định đã khai báo.


Nhiều hàm trong C có số lượng tham số và kiểu tham số tùy ý, ví dụ
printf(“%d %d %f %ld %s”,m,n,x,k,mahh); có 6 tham số.

1. Với loại hàm này yêu cầu:
– Tham số đầu tiên có kiểu phải rõ ràng. Các kiểu này phải được định nghĩa từ trước.
– Các tham số còn lại được trình bày bằng dấu ba chấm …
– Không biết được số lượng tham số và kiểu tham số đối với các tham số thêm. Vì thế ta phải biết trước số lượng và kiểu tham số, hoặc các tham số đầu tiên cho ta biết thông tin này, hoặc có dấu hiệu nào đó khác để biết kết thúc tham số thêm.
=> Vì vậy một hàm có thể định nghĩa là func1(char*, …) hoặc func2(int, char*, int, …), …

2. Các macro và kiểu dữ liệu va_list được định nghĩa trong <cstdarg>:
va_list: kiểu dữ liệu chứa các tham số có trong …
void va_start(va_list ap, lastfix) : macro thiết lập ap chỉ đến tham số đầu tiên trong … với lastfix là tên tham số cố định cuối cùng.
type va_arg(va_list ap, type) : macro trả về tham số có kiểu type tiếp theo.

void va_end(va_list ap) : macro giúp cho hàm trả về giá trị một cách “bình thường”.

Thứ Ba, 11 tháng 7, 2017

1. Khai báo:
int main( int argc, char *argv[ ])
·         Đối argc (argument count) đầu tiên là số lượng đối dòng lệnh,
·         Đối argv (argument vector) thứ hai là con trỏ trỏ tới mảng xâu ký tự, mảng này chứa danh sách các đối số dòng lệnh, mỗi đối là một xâu. Khi gõ vào từ dòng lệnh các tham số phải cách nhau bởi dấu cách
Theo quy ước argv[0] là tên chương trình, do đó argc ít nhất bằng 1. Nếu argc = 1 thì sau tên chương trình không có đối dòng lệnh. Tham số dòng lệnh đầu tiên là argv[1] và tham số dòng lệnh cuối cùng là argv[argc-1].
2. Chương trình exe chạy ở chế độ Command Line
·         Dịch chương trình ra tệp dsdl1.exe
·         Ấn phím Windows + R mở hộp thoại RUN, chạy cmd, ra cửa sổ dấu nhắc lệnh
·         Ví dụ nhập các đối số dòng lệnh:  d:\>dsdl1 hanoi 2017

3. Ý nghĩa: chương trình sử dụng các đối số dòng lệnh như dữ liệu vào của chương trình. Ví dụ lệnh của hệ điều hành: c:\>copy baocao.doc d:\luutru

Categories

Sample Text

Được tạo bởi Blogger.

Must Read

Biểu mẫu liên hệ

Tên

Email *

Thông báo *

Popular Posts

Video

Popular Posts

Our Facebook Page