markdown:
๑۩۞۩๑ ♥(¯`•▒»¦ηЋǿċ_ßµị_¦«▒• ´¯)♥๑۩۞۩๑
—»™ †...—Thäñh—...†™« —
Index
Calendar
Trợ giúp
Tìm kiếm
Tìm kiếm
Display results as :
Số bài
Chủ đề
Advanced Search
Thành viên
Nhóm
Đăng ký
Đăng Nhập
๑۩۞۩๑ ♥(¯`•▒»¦ηЋǿċ_ßµị_¦«▒• ´¯)♥๑۩۞۩๑
::
Lập trình
Share
|
Chuong4- Ham va chuong trinh
Tác giả
Thông điệp
Admin
Admin
Tổng số bài gửi
:
45
Join date
:
11/12/2010
Age
:
25
Đến từ
:
Ha Noi
Tiêu đề: Chuong4- Ham va chuong trinh
Thu Dec 16, 2010 1:53 pm
a. Khái niệm chung
6. Thực Mảng con trỏ
chất một con trỏ cũng là một biến thông thường có tên gọi (ví dụ p, q, …), do đó cũng giống như biến, nhiều biến cùng kiểu có thể tổ chức thành một mảng với tên gọi chung, ở đây cũng vậy nhiều con trỏ cùng kiểu cũng được tổ chức thành mảng. Như vậy mỗi phần tử của mảng con trỏ là một con trỏ trỏ đến một mảng nào đó. Nói cách khác một mảng con trỏ cho phép quản lý nhiều mảng dữ liệu cùng kiểu. Cách khai báo:
<kiểu> *a[size];
Ví dụ:
int *a[10];
khai báo một mảng chứa 10 con trỏ. Mỗi con trỏ a[i] chứa địa chỉ của một mảng nguyên nào đó.
b. Mảng xâu kí tự
Là trường hợp riêng của mảng con trỏ nói chung, trong đó kiểu cụ thể là char. Mỗi thành phần mảng là một con trỏ trỏ đến một xâu kí tự, có nghĩa các thao tác tiến hành trên *a[i] như đối với một xâu kí tự.
Ví dụ 1 : Nhập vào và in ra một bài thơ.
main()
{
clrscr();
char *dong[100]; // khai báo 100 con trỏ kí tự (100 dòng)
int i, n;
cout << "so dong = "; cin >> n ; // nhập số dòng thực sự
cin.ignore(); // loại dấu trong lệnh cin ở trên
for (i=0; i<n; i++)
{
dong[i] = new char[80]; // cấp bộ nhớ cho dòng i
cin.getline(dong[i],80); // nhập dòng i
}
for (i=0; i<n; i++) cout << dong[i] << endl; // in kết quả
getch();
}
II. HÀM
Hàm là một chương trình con trong chương trình lớn. Hàm nhận (hoặc không) các đối số và trả lại (hoặc không) một giá trị cho chương trình gọi nó. Trong trường hợp không trả lại giá trị, hàm hoạt động như một thủ tục trong các NNLT khác. Một chương trình là tập các hàm, trong đó có một hàm chính với tên gọi main(), khi chạy chương trình, hàm main() sẽ được chạy đầu tiên và gọi đến hàm khác. Kết thúc hàm main() cũng là kết thúc chương trình.
Hàm giúp cho việc phân đoạn chương trình thành những môđun riêng rẽ, hoạt động độc lập với ngữ nghĩa của chương trình lớn, có nghĩa một hàm có thể được sử dụng trong chương trình này mà cũng có thể được sử dụng trong chương trình khác, dễ cho việc kiểm tra và bảo trì chương trình. Hàm có một số đặc trưng:
• Nằm trong hoặc ngoài văn bản có chương trình gọi đến hàm. Trong một văn bản có thể chứa nhiều hàm,
• Được gọi từ chương trình chính (main), từ hàm khác hoặc từ chính nó (đệ quy),
• Không lồng nhau.
• Có 3 cách truyền giá trị: Truyền theo tham trị, tham biến và tham trỏ.
1. Khai báo và định nghĩa hàm
a. Khai báo
Một hàm thường làm chức năng: tính toán trên các tham đối và cho lại giá trị kết quả, hoặc chỉ đơn thuần thực hiện một chức năng nào đó, không trả lại kết quả tính toán. Thông thường kiểu của giá trị trả lại được gọi là kiểu của hàm. Các hàm thường được khai báo ở đầu chương trình. Các hàm viết sẵn được khai báo trong các file nguyên mẫu *.h. Do đó, để sử dụng được các hàm này, cần có chỉ thị #include <*.h> ở ngay đầu chương trình, trong đó *.h là tên file cụ thể có chứa khai báo của các hàm được sử dụng (ví dụ để sử dụng các hàm toán học ta cần khai báo file nguyên mẫu math.h). Đối với các hàm do NSD tự viết, cũng cần phải khai báo. Khai báo một hàm như sau:
<kiểu giá trị trả lại> <tên hàm>(d/s kiểu đối) ;
trong đó, kiểu giá trị trả lại còn gọi là kiểu hàm và có thể nhận kiểu bất kỳ chuẩn của C++ và cả kiểu của NSD tự tạo. Đặc biệt nếu hàm không trả lại giá trị thì kiểu của giá trị trả lại được khai báo là void. Nếu kiểu giá trị trả lại được bỏ qua thì chương trình ngầm định hàm có kiểu là int (phân biệt với void !).
Ví dụ 1 :
int bp(int); // Khai báo hàm bp, có đối kiểu int và kiểu hàm là int
int rand100(); // Không đối, kiểu hàm (giá trị trả lại) là int
void alltrim(char[]) ; // đối là xâu kí tự, hàm không trả lại giá trị (không kiểu).
cong(int, int); // Hai đối kiểu int, kiểu hàm là int (ngầm định).
Thông thường để chương trình được rõ ràng chúng ta nên tránh lạm dụng các ngầm định. Ví dụ trong khai báo cong(int, int); nên khai báo rõ cả kiểu hàm (trong trường hợp này kiểu hàm ngầm định là int) như sau : int cong(int, int);
b. Định nghĩa hàm
Cấu trúc một hàm bất kỳ được bố trí cũng giống như hàm main() trong các phần trước. Cụ thể:
• Hàm có trả về giá trị
<kiểu hàm> <tên hàm>(danh sách tham đối hình thức)
{
khai báo cục bộ của hàm ; // chỉ dùng riêng cho hàm này
dãy lệnh của hàm ;
return (biểu thức trả về); // có thể nằm đâu đó trong dãy lệnh.
}
Danh sách tham đối hình thức còn được gọi ngắn gọn là danh sách đối gồm dãy các đối cách nhau bởi dấu phẩy, đối có thể là một biến thường, biến tham chiếu hoặc biến con trỏ, hai loại biến sau ta sẽ trình bày trong các phần tới. Mỗi đối được khai báo giống như khai báo biến, tức là cặp gồm <kiểu đối> <tên đối>.
Với hàm có trả lại giá trị cần có câu lệnh return kèm theo sau là một biểu thức. Kiểu của giá trị biểu thức này chính là kiểu của hàm đã được khai báo ở phần tên hàm. Câu lênh return có thể nằm ở vị trí bất kỳ trong phần câu lệnh, tuỳ thuộc mục đích của hàm. Khi gặp câu lệnh return chương trình tức khắc thoát khỏi hàm và trả lại giá trị của biểu thức sau return như giá trị của hàm.
Ví dụ 2 : Ví dụ sau định nghĩa hàm tính luỹ thừa n (với n nguyên) của một số thực bất kỳ. Hàm này có hai đầu vào (đối thực x và số mũ nguyên n) và đầu ra (giá trị trả lại) kiểu thực với độ chính xác gấp đôi là xn.
double luythua(float x, int n)
{
int i ; // biến chỉ số
double kq = 1 ; // để lưu kết quả
for (i=1; i<=n; i++) kết quả *= x ;
return kq;
}
• Hàm không trả về giá trị
Nếu hàm không trả lại giá trị (tức kiểu hàm là void), khi đó có thể có hoặc không có câu lệnh return, nếu có thì đằng sau return sẽ không có biểu thức giá trị trả lại.
Ví dụ 3 : Hàm xoá màn hình 100 lần, hàm chỉ làm công việc cẩn thận xoá màn hình nhiều lần để màn hình thật sạch, nên không có giá trị gì để trả lại.
void xmh()
{
int i;
for (i=1; i<=100; i++) clrscr();
return ;
}
Hàm main() thông thường có hoặc không có giá trị trả về cho hệ điều hành khi chương trình chạy xong, vì vậy ta thường khai báo kiểu hàm là int main() hoặc void main() và câu lệnh cuối cùng trong hàm thường là return 1 hoặc return. Trường hợp bỏ qua từ khoá void nhưng trong thân hàm không có câu lệnh return (giống phần lớn ví dụ trong giáo trình này) chương trình sẽ ngầm hiểu hàm main() trả lại một giá trị nguyên nhưng vì không có nên khi dịch chương trình ta sẽ gặp lời cảnh báo "Cần có giá trị trả lại cho hàm" (một lời cảnh báo không phải là lỗi, chương trình vẫn chạy bình thường). Để tránh bị quấy rầy về những lời cảnh báo "không mời" này chúng ta có thể đặt thêm câu lệnh return 0; (nếu không khai báo void main()) hoặc khai báo kiểu hàm là void main() và đặt câu lệnh return vào cuối hàm.
c. Chú ý về khai báo và định nghĩa hàm
• Danh sách đối trong khai báo hàm có thể chứa hoặc không chứa tên đối, thông thường ta chỉ khai báo kiểu đối chứ không cần khai báo tên đối, trong khi ở dòng đầu tiên của định nghĩa hàm phải có tên đối đầy đủ.
• Cuối khai báo hàm phải có dấu chấm phẩy (
, trong khi cuối dòng đầu tiên của định nghĩa hàm không có dấu chấm phẩy.
• Hàm có thể không có đối (danh sách đối rỗng), tuy nhiên cặp dấu ngoặc sau tên hàm vẫn phải được viết. Ví dụ clrscr(), lamtho(), vietgiaotrinh(), …
• Một hàm có thể không cần phải khai báo nếu nó được định nghĩa trước khi có hàm nào đó gọi đến nó. Ví dụ có thể viết hàm main() trước (trong văn bản chương trình), rồi sau đó mới viết đến các hàm "con". Do trong hàm main() chắc chắn sẽ gọi đến hàm con này nên danh sách của chúng phải được khai báo trước hàm main(). Trường hợp ngược lại nếu các hàm con được viết (định nghĩa) trước thì không cần phải khai báo chúng nữa (vì trong định nghĩa đã hàm ý khai báo). Nguyên tắc này áp dụng cho hai hàm A, B bất kỳ chứ không riêng cho hàm main(), nghĩa là nếu B gọi đến A thì trước đó A phải được định nghĩa hoặc ít nhất cũng có dòng khai báo về A.
2. Lời gọi và sử dụng hàm
Lời gọi hàm được phép xuất hiện trong bất kỳ biểu thức, câu lệnh của hàm khác … Nếu lời gọi hàm lại nằm trong chính bản thân hàm đó thì ta gọi là đệ quy. Để gọi hàm ta chỉ cần viết tên hàm và danh sách các giá trị cụ thể truyền cho các đối đặt trong cặp dấu ngoặc tròn ().
tên hàm(danh sách tham đối thực sự) ;
Danh sách tham đối thực sự còn gọi là danh sách giá trị gồm các giá trị cụ thể để gán lần lượt cho các đối hình thức của hàm. Khi hàm được gọi thực hiện thì tất cả những vị trí xuất hiện của đối hình thức sẽ được gán cho giá trị cụ thể của đối thực sự tương ứng trong danh sách, sau đó hàm tiến hành thực hiện các câu lệnh của hàm (để tính kết quả).
Danh sách tham đối thực sự truyền cho tham đối hình thức có số lượng bằng với số lượng đối trong hàm và được truyền cho đối theo thứ tự tương ứng. Các tham đối thực sự có thể là các hằng, các biến hoặc biểu thức. Biến trong giá trị có thể trùng với tên đối. Ví dụ ta có hàm in n lần kí tự c với tên hàm inkitu(int n, char c); và lời gọi hàm inkitu(12, 'A'); thì n và c là các đối hình thức, 12 và 'A' là các đối thực sự hoặc giá trị. Các đối hình thức n và c sẽ lần lượt được gán bằng các giá trị tương ứng là 12 và 'A' trước khi tiến hành các câu lệnh trong phần thân hàm. Giả sử hàm in kí tự được khai báo lại thành inkitu(char c, int n); thì lời gọi hàm cũng phải được thay lại thành inkitu('A', 12).
Các giá trị tương ứng được truyền cho đối phải có kiểu cùng với kiểu đối (hoặc C++ có thể tự động chuyển kiểu được về kiểu của đối).
Khi một hàm được gọi, nơi gọi tạm thời chuyển điều khiển đến thực hiện dòng lệnh đầu tiên trong hàm được gọi. Sau khi kết thúc thực hiện hàm, điều khiển lại được trả về thực hiện tiếp câu lệnh sau lệnh gọi hàm của nơi gọi.
Ví dụ 4 : Giả sử ta cần tính giá trị của biểu thức 2x3 - 5x2 - 4x + 1, thay cho việc tính trực tiếp x3 và x2, ta có thể gọi hàm luythua() trong ví dụ trên để tính các giá trị này bằng cách gọi nó trong hàm main() như sau:
#include <iostream.h>
#include <iomanip.h>
double luythua(float x, int n) // trả lại giá trị xn
{
int i ; // biến chỉ số
double kq = 1 ; // để lưu kết quả
for (i=1; i<=n; i++) kết quả *= x ;
return kq;
}
void xmh(int n) // xoá màn hình n lần
{
int i;
for (i=1; i<=n; i++) clrscr();
return ;
}
main() // tính giá trị 2x3 - 5x2 - 4x + 1
{
float x ; // tên biến có thể trùng với đối của hàm
double f ; // để lưu kết quả
cout << "x = " ; cin >> x
f = 2*luythua(x,3) - 5*luythua(x,2) - 4*x + 1;
xmh(100); // xoá thật sạch màn hình 100 lần
cout << setprecision(2) << f << endl ;
}
Qua ví dụ này ta thấy lợi ích của lập trình cấu trúc, chương trình trở nên gọn hơn, chẳng hạn hàm luythua() chỉ được viết một lần nhưng có thể sử dụng nó nhiều lần (2 lần trong ví dụ này) chỉ bằng một câu lệnh gọi đơn giản cho mỗi lần sử dụng thay vì phải viết lại nhiều lần đoạn lệnh tính luỹ thừa.
3. Hàm với đối mặc định
Mục này và mục sau chúng ta bàn đến một vài mở rộng thiết thực của C++ đối với C có liên quan đến hàm, đó là hàm với đối mặc định và cách tạo, sử dụng các hàm có chung tên gọi. Một mở rộng quan trọng khác là cách truyền đối theo tham chiếu sẽ được bàn chung trong mục truyền tham đối thực sự cho hàm.
Trong phần trước chúng ta đã khẳng định số lượng tham đối thực sự phải bằng số lượng tham đối hình thức khi gọi hàm. Tuy nhiên, trong thực tế rất nhiều lần hàm được gọi với các giá trị của một số tham đối hình thức được lặp đi lặp lại. Trong trường hợp như vậy lúc nào cũng phải viết một danh sách dài các tham đối thực sự giống nhau cho mỗi lần gọi là một công việc không mấy thú vị. Từ thực tế đó C++ đưa ra một cú pháp mới về hàm sao cho một danh sách tham đối thực sự trong lời gọi không nhất thiết phải viết đầy đủ nếu một số trong chúng đã có sẵn những giá trị định trước. Cú pháp này được gọi là hàm với tham đối mặc định và được khai báo với cú pháp như sau:
<kiểu hàm> <tên hàm>(đ1, …, đn, đmđ1 = gt1, …, đmđm = gtm) ;
Các đối đ1, …, đn và đối mặc định đmđ1, …, đmđm đều được khai báo như cũ nghĩa là gồm có kiểu đối và tên đối.
Riêng các đối mặc định đmđ1, …, đmđm có gán thêm các giá trị mặc định gt1, …, gtm. Một lời gọi bất kỳ khi gọi đến hàm này đều phải có đầy đủ các tham đối thực sự ứng với các đ1, …, đm nhưng có thể có hoặc không các tham đối thực sự ứng với các đối mặc định đmđ1, …, đmđm. Nếu tham đối nào không có tham đối thực sự thì nó sẽ được tự động gán giá trị mặc định đã khai báo.
Ví dụ 5 :
Xét hàm xmh(int n = 100), trong đó n mặc định là 100, nghĩa là nếu gọi xmh(99) thì màn hình được xoá 99 lần, còn nếu gọi xmh(100) hoặc gọn hơn xmh() thì chương trình sẽ xoá màn hình 100 lần.
Tương tự, xét hàm int luythua(float x, int n = 2); Hàm này có một tham đối mặc định là số mũ n, nếu lời gọi hàm bỏ qua số mũ này thì chương trình hiểu là tính bình phương của x (n = 2). Ví dụ lời gọi luythua(4, 3) được hiểu là 43 còn luythua(4) được hiểu là 42.
Hàm tính tổng 4 số nguyên: int tong(int m, int n, int i = 0; int j = 0); khi đó có thể tính tổng của 5, 2, 3, 7 bằng lời gọi hàm tong(5,2,3,7) hoặc có thể chỉ tính tổng 3 số 4, 2, 1 bằng lời gọi tong(4,2,1) hoặc cũng có thể gọi tong(6,4) chỉ để tính tổng của 2 số 6 và 4.
Chú ý: Các đối 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 đối. Ví dụ:
int tong(int x, int y=2, int z, int t=1); // sai vì các đối mặc định không liên tục
void xoa(int x=0, int y) // sai vì đối mặc định không ở cuối
4. Khai báo hàm trùng tên
Hàm trùng tên hay còn gọi là hàm chồng (đè). Đây là một kỹ thuật cho phép sử dụng cùng một tên gọi cho các hàm "giống nhau" (cùng mục đích) nhưng xử lý trên các kiểu dữ liệu khác nhau hoặc trên số lượng dữ liệu khác nhau. Ví dụ hàm sau tìm số lớn nhất trong 2 số nguyên:
int max(int a, int b) { return (a > b) ? a: b ; }
Nếu đặt c = max(3, 5) ta sẽ có c = 5. Tuy nhiên cũng tương tự như vậy nếu đặt c = max(3.0, 5.0) chương trình sẽ bị lỗi vì các giá trị (float) không phù hợp về kiểu (int) của đối trong hàm max. Trong trường hợp như vậy chúng ta phải viết hàm mới để tính max của 2 số thực. Mục đích, cách làm việc của hàm này hoàn toàn giống hàm trước, tuy nhiên trong C và các NNLT cổ điển khác chúng ta buộc phải sử dụng một tên mới cho hàm "mới" này. Ví dụ:
float fmax(float a, float b) { return (a > b) ? a: b ; }
Tương tự để tuận tiện ta sẽ viết thêm các hàm
char cmax(char a, char b) { return (a > b) ? a: b ; }
long lmax(long a, long b) { return (a > b) ? a: b ; }
double dmax(double a, double b) { return (a > b) ? a: b ; }
Tóm lại ta sẽ có 5 hàm: max, cmax, fmax, lmax, dmax, việc sử dụng tên như vậy sẽ gây bất lợi khi cần gọi hàm. C++ cho phép ta có thể khai báo và định nghĩa cả 5 hàm trên với cùng 1 tên gọi ví dụ là max chẳng hạn. Khi đó ta có 5 hàm:
1: int max(int a, int b) { return (a > b) ? a: b ; }
2: float max(float a, float b) { return (a > b) ? a: b ; }
3: char max(char a, char b) { return (a > b) ? a: b ; }
4: long max(long a, long b) { return (a > b) ? a: b ; }
5: double max(double a, double b) { return (a > b) ? a: b ; }
Và lời gọi hàm bất kỳ dạng nào như max(3,5), max(3.0,5), max('O', 'K') đều được đáp ứng. Chúng ta có thể đặt ra vấn đề: với cả 5 hàm cùng tên như vậy, chương trình gọi đến hàm nào. Vấn đề được giải quyết dễ dàng vì chương trình sẽ dựa vào kiểu của các đối khi gọi để quyết định chạy hàm nào. Ví dụ lời gọi max(3,5) có 2 đối đều là kiểu nguyên nên chương trình sẽ gọi hàm 1, lời gọi max(3.0,5) hướng đến hàm số 2 và tương tự chương trình sẽ chạy hàm số 3 khi gặp lời gọi max('O','K'). Như vậy một đặc điểm của các hàm trùng tên đó là trong danh sách đối của chúng phải có ít nhất một cặp đối nào đó khác kiểu nhau. Một đặc trưng khác để phân biệt thông qua các đối đó là số lượng đối trong các hàm phải khác nhau (nếu kiểu của chúng là giống nhau).
Ví dụ việc vẽ các hình: thẳng, tam giác, vuông, chữ nhật trên màn hình là giống nhau, chúng chỉ phụ thuộc vào số lượng các điểm nối và toạ độ của chúng. Do vậy ta có thể khai báo và định nghĩa 4 hàm vẽ nói trên với cùng chung tên gọi. Chẳng hạn:
void ve(Diem A, Diem B) ; // vẽ đường thẳng AB
void ve(Diem A, Diem B, Diem C) ; // vẽ tam giác ABC
void ve(Diem A, Diem B, Diem C, Diem D) ; // vẽ tứ giác ABCD
trong ví dụ trên ta giả thiết Diem là một kiểu dữ liệu lưu toạ độ của các điểm trên màn hình. Hàm ve(Diem A, Diem B, Diem C, Diem D) sẽ vẽ hình vuông, chữ nhật, thoi, bình hành hay hình thang phụ thuộc vào toạ độ của 4 điểm ABCD, nói chung nó được sử dụng để vẽ một tứ giác bất kỳ.
Tóm lại nhiều hàm có thể được định nghĩa chồng (với cùng tên gọi giống nhau) nếu chúng thoả các điều kiện sau:
• Số lượng các tham đối trong hàm là khác nhau, hoặc
• Kiểu của tham đối trong hàm là khác nhau.
Kỹ thuật chồng tên này còn áp dụng cả cho các toán tử. Trong phần lập trình hướng đối tượng, ta sẽ thấy NSD được phép định nghĩa các toán tử mới nhưng vẫn lấy tên cũ như +, -, *, / …
5. Biến, đối tham chiếu
Một biến có thể được gán cho một bí danh mới, và khi đó chỗ nào xuất hiện biến thì cũng tương đương như dùng bí danh và ngược lại. Một bí danh như vậy được gọi là một biến tham chiếu, ý nghĩa thực tế của nó là cho phép "tham chiếu" tới một biến khác cùng kiểu của nó, tức sử dụng biến khác nhưng bằng tên của biến tham chiếu.
Giống khai báo biến bình thường, tuy nhiên trước tên biến ta thêm dấu và (&). Có thể tạm phân biến thành 3 loại: biến thường với tên thường, biến con trỏ với dấu * trước tên và biến tham chiếu với dấu &.
<kiểu biến> &<tên biến tham chiếu> = <tên biến được tham chiếu>;
Cú pháp khai báo này cho phép ta tạo ra một biến tham chiếu mới và cho nó tham chiếu đến biến được tham chiếu (cùng kiểu và phải được khai báo từ trước). Khi đó biến tham chiếu còn được gọi là bí danh của biến được tham chiếu. Chú ý không có cú pháp khai báo chỉ tên biến tham chiếu mà không kèm theo khởi tạo.
Ví dụ:
int hung, dung ; // khai báo các biến nguyên hung, dung
int &ti = hung; // khai báo biến tham chiếu ti, teo tham chieu đến
int &teo = dung; // hung dung. ti, teo là bí danh của hung, dung
Từ vị trí này trở đi việc sử dụng các tên hung, ti hoặc dung, teo là như nhau.
Ví dụ:
hung = 2 ;
ti ++; // tương đương hung ++;
cout << hung << ti ; // 3 3
teo = ti + hung ; // tương đương dung = hung + hung
dung ++ ; // tương đương teo ++
cout << dung << teo ; // 7 7
Vậy sử dụng thêm biến tham chiếu để làm gì ?
Cách tổ chức bên trong của một biến tham chiếu khác với biến thường ở chỗ nội dung của nó là địa chỉ của biến mà nó đại diện (giống biến con trỏ), ví dụ câu lệnh
cout << teo ; // 7
in ra giá trị 7 nhưng thực chất đây không phải là nội dung của biến teo, nội dung của teo là địa chỉ của dung, khi cần in teo, chương trình sẽ tham chiếu đến dung và in ra nội dung của dung (7). Các hoạt động khác trên teo cũng vậy (ví dụ teo++), thực chất là tăng một đơn vị nội dung của dung (chứ không phải của teo). Từ cách tổ chức của biến tham chiếu ta thấy chúng giống con trỏ nhưng thuận lợi hơn ở chỗ khi truy cập đên giá trị của biến được tham chiếu (dung) ta chỉ cần ghi tên biến tham chiếu (teo) chứ không cần thêm toán tử (*) ở trước như trường hợp dùng con trỏ. Điểm khác biệt này có ích khi được sử dụng để truyền đối cho các hàm với mục đích làm thay đổi nội dung của biến ngoài. Tư tưởng này được trình bày rõ ràng hơn trong mục 6 của chương.
Chú ý:
• Biến tham chiếu phải được khởi tạo khi khai báo.
• Tuy giống con trỏ nhưng không dùng được các phép toán con trỏ cho biến tham chiếu. Nói chung chỉ nên dùng trong truyền đối cho hàm.
6. Các cách truyền tham đối
Có 3 cách truyền tham đối thực sự cho các tham đối hình thức trong lời gọi hàm. Trong đó cách ta đã dùng cho đến thời điểm hiện nay được gọi là truyền theo tham trị, tức các đối hình thức sẽ nhận các giá trị cụ thể từ lời gọi hàm và tiến hành tính toán rồi trả lại giá trị. Để dễ hiểu các cách truyền đối chúng ta sẽ xem qua cách thức chương trình thực hiện với các đối khi thực hiện hàm.
a. Truyền theo tham trị
Ta xét lại ví dụ hàm luythua(float x, int n) tính xn. Giả sử trong chương trình chính ta có các biến a, b, f đang chứa các giá trị a = 2, b = 3, và f chưa có giá trị. Để tính ab và gán giá trị tính được cho f, ta có thể gọi f = luythua(a,b). Khi gặp lời gọi này, chương trình sẽ tổ chức như sau:
Tạo 2 biến mới (tức 2 ô nhớ trong bộ nhớ) có tên x và n. Gán nội dung các ô nhớ này bằng các giá trị trong lời gọi, tức gán 2 (a) cho x và 3 (b) cho n.
Tới phần khai báo (của hàm), chương trình tạo thêm các ô nhớ mang tên kq và i.
Tiến hành tính toán (gán lại kết quả cho kq).
Cuối cùng lấy kết quả trong kq gán cho ô nhớ f (là ô nhớ có sẵn đã được khai báo trước, nằm bên ngoài hàm).
Kết thúc hàm quay về chương trình gọi. Do hàm luythua đã hoàn thành xong việc tính toán nên các ô nhớ được tạo ra trong khi thực hiện hàm (x, n, kq, i) sẽ được xoá khỏi bộ nhớ. Kết quả tính toán được lưu giữ trong ô nhớ f (không bị xoá vì không liên quan gì đến hàm).
Trên đây là truyền đối theo cách thông thường. Vấn đề đặt ra là giả sử ngoài việc tính f, ta còn muốn thay đối các giá trị của các ô nhớ a, b (khi truyền nó cho hàm) thì có thể thực hiện được không ? Để giải quyết bài toán này ta cần theo một kỹ thuật khác, nhờ vào vai trò của biến con trỏ và tham chiếu.
b. Truyền theo dẫn trỏ
Xét ví dụ tráo đổi giá trị của 2 biến. Đây là một yêu cầu nhỏ nhưng được gặp nhiều lần trong chương trình, ví dụ để sắp xếp một danh sách. Do vậy cần viết một hàm để thực hiện yêu cầu trên. Hàm không trả kết quả. Do các biến cần trao đổi là chưa được biết trước tại thời điểm viết hàm, nên ta phải đưa chúng vào hàm như các tham đối, tức hàm có hai tham đối x, y đại diện cho các biến sẽ thay đổi giá trị sau này.
Từ một vài nhận xét trên, theo thông thường hàm tráo đổi sẽ được viết như sau:
void swap(int x, int y)
{
int t ; t = x ; x = y ; y = t ;
}
Giả sử trong chương trình chính ta có 2 biến x, y chứa các giá trị lần lượt là 2, 5. Ta cần đổi nội dung 2 biến này sao cho x = 5 còn y = 2 bằng cách gọi đến hàm swap(x, y).
main()
{
int x = 2; int y = 5;
swap(x, y) ;
cout << x << y ; // 2, 5 (x, y vẫn không đổi)
}
Thực sự sau khi chạy xong chương trình ta thấy giá trị của x và y vẫn không thay đổi !?.
Như đã giải thích trong mục trên (gọi hàm luythua), việc đầu tiên khi chương trình thực hiện một hàm là tạo ra các biến mới (các ô nhớ mới, độc lập với các ô nhớ x, y đã có sẵn) tương ứng với các tham đối, trong trường hợp này cũng có tên là x, y và gán nội dung của x, y (ngoài hàm) cho x, y (mới). Và việc cuối cùng của chương trình sau khi thực hiện xong hàm là xoá các biến mới này. Do vậy nội dung của các biến mới thực sự là có thay đổi, nhưng không ảnh hưởng gì đến các biến x, y cũ. Hình vẽ dưới đây minh hoạ cách làm việc của hàm swap, trước, trong và sau khi gọi hàm.
Trước Trong Sau
x y x y x y
2 5 2 5 2 5
t x' y'
2 2 5 Các biến tạm bị xoá khi chạy xong hàm
2 5 5
2 5 2
Như vậy hàm swap cần được viết lại sao cho việc thay đối giá trị không thực hiện trên các biến tạm mà phải thực sự thực hiện trên các biến ngoài. Muốn vậy thay vì truyền giá trị của các biến ngoài cho đối, bây giờ ta sẽ truyền địa chỉ của nó cho đối, và các thay đổi sẽ phải thực hiện trên nội dung của các địa chỉ này. Đó chính là lý do ta phải sử dụng con trỏ để làm tham đối thay cho biến thường. Cụ thể hàm swap được viết lại như sau:
void swap(int *p, int *q)
{
int t; // khai báo biến tạm t
t = *p ; // đặt giá trị của t bằng nội dung nơi p trỏ tới
*p = *q ; // thay nội dung nơi p trỏ bằng nội dung nơi q trỏ
*q = t ; // thay nội dung nơi q trỏ tới bằng nội dung của t
}
Với cách tổ chức hàm như vậy rõ ràng nếu ta cho p trỏ tới biến x và q trỏ tới biến y thì hàm swap sẽ thực sự làm thay đổi nội dung của x, y chứ không phải của p, q.
Từ đó lời gọi hàm sẽ là swap(&x, &y) (tức truyền địa chỉ của x cho p, p trỏ tới x và tương tự q trỏ tới y).
Như vậy có thể tóm tắt 3 đặc trưng để viết một hàm làm thay đổi giá trị biến ngoài như sau:
• Đối của hàm phải là con trỏ (ví dụ int *p)
• Các thao tác liên quan đến đối này (trong thân hàm) phải thực hiện tại nơi nó trỏ đến (ví dụ *p = …)
• Lời gọi hàm phải chuyển địa chỉ cho p (ví dụ &x).
Ngoài hàm swap đã trình bày, ở đây ta đưa thêm ví dụ để thấy sự cần thiết phải có hàm cho phép thay đổi biến ngoài. Ví dụ hàm giải phương trình bậc 2 rất hay gặp trong các bài toán khoa học kỹ thuật. Tức cho trước 3 số a, b, c như 3 hệ số của phương trình, cần tìm 2 nghiệm x1, x2 của nó. Không thể lấy giá trị trả lại của hàm để làm nghiệm vì giá trị trả lại chỉ có 1 trong khi ta cần đến 2 nghiệm. Do vậy ta cần khai báo 2 biến "ngoài" trong chương trình để chứa các nghiệm, và hàm phải làm thay đổi 2 biến này (tức chứa giá trị nghiệm giải được). Như vậy hàm được viết cần phải có 5 đối, trong đó 3 đối a, b, c đại diện cho các hệ số, không thay đổi và 2 biến x1, x2 đại diện cho nghiệm, 2 đối này phải được khai báo dạng con trỏ. Ngoài ra, phương trình có thể vô nghiệm, 1 nghiệm hoặc 2 nghiệm do vậy hàm sẽ trả lại giá trị là số nghiệm của phương trình, trong trường hợp 1 nghiệm (nghiệm kép), giá trị nghiệm sẽ được cho vào x1.
Ví dụ 6 : Dưới đây là một dạng đơn giản của hàm giải phương trình bậc 2.
int gptb2(float a, float b, float c, float *p, float *q)
{
float d ; // để chứa
d = (b*b) - 4*a*c ;
if (d < 0) return 0 ;
else if (d == 0) { *p = -b/(2*a) ; return 1 ; }
else {
*p = (-b + sqrt(d))/(2*a) ;
*q = (-b - sqrt(d))/(2*a) ;
return 2 ;
}
}
Một ví dụ của lời gọi hàm trong chương trình chính như sau:
main()
{
float a, b, c ; // các hệ số
float x1, x2 ; // các nghiệm
cout << "Nhập hệ số: " ;
cin >> a >> b >> c;
switch (gptb2(a, b, c, &x1, &x2))
{
case 0: cout << "Phương trình vô nghiệm" ; break;
case 1: cout << "Phương trình có nghiệm kép x = " << x1 ; break ;
case 2: cout << "Phương trình có 2 nghiệm phân biệt:" << endl ;
cout << "x1 = " << x1 << " và x2 = " << x2 << endl ; break;
}
}
Trên đây chúng ta đã trình bày cách xây dựng các hàm cho phép thay đổi giá trị của biến ngoài. Một đặc trưng dễ nhận thấy là cách viết hàm tương đối phức tạp. Do vậy C++ đã phát triển một cách viết khác dựa trên đối tham chiếu và việc truyền đối cho hàm được gọi là truyền theo tham chiếu.
c. Truyền theo tham chiếu
Một hàm viết dưới dạng đối tham chiếu sẽ đơn giản hơn rất nhiều so với đối con trỏ và giống với cách viết bình thường (truyền theo tham trị), trong đó chỉ có một khác biệt đó là các đối khai báo dưới dạng tham chiếu.
Để so sánh 2 cách sử dụng ta nhắc lại các điểm khi viết hàm theo con trỏ phải chú ý đến, đó là:
Đối của hàm phải là con trỏ (ví dụ int *p)
Các thao tác liên quan đến đối này trong thân hàm phải thực hiện tại nơi nó trỏ đến (ví dụ *p = …)
Lời gọi hàm phải chuyển địa chỉ cho p (ví dụ &x).
Hãy so sánh với đối tham chiếu, cụ thể:
• Đối của hàm phải là tham chiếu (ví dụ int &p)
• Các thao tác liên quan đến đối này phải thực hiện tại nơi nó trỏ đến, tức địa chỉ cần thao tác. Vì một thao tác trên biến tham chiếu thực chất là thao tác trên biến được nó tham chiếu nên trong hàm chỉ cần viết p trong mọi thao tác (thay vì *p như trong con trỏ)
• Lời gọi hàm phải chuyển địa chỉ cho p. Vì bản thân p khi tham chiếu đến biến nào thì sẽ chứa địa chỉ của biến đó, do đó lời gọi hàm chỉ cần ghi tên biến, ví dụ x (thay vì &x như đối với dẫn trỏ).
Tóm lại, đối với hàm viết theo tham chiếu chỉ thay đổi ở đối (là các tham chiếu) còn lại mọi nơi khác đều viết đơn giản như cách viết truyền theo tham trị.
Ví dụ 7 : Đổi giá trị 2 biến
void swap(int &x, int &y)
{
int t = x; x = y; y = t;
}
và lời gọi hàm cũng đơn giản như trong truyền đối theo tham trị. Ví dụ:
int a = 5, b = 3;
swap(a, b);
cout << a << b;
Bảng dưới đây minh hoạ tóm tắt 3 cách viết hàm thông qua ví dụ đổi biến ở trên.
Tham trị Tham chiếu Dẫn trỏ
Khai báo đối void swap(int x, int y) void swap(int &x, int &y) void swap(int *x, int *y)
Câu lệnh t = x; x = y; y = t; t = x; x = y; y = t; t = *x; *x = *y; *y = t;
Lời gọi swap(a, b); swap(a, b); swap(&a, &b);
Tác dụng a, b không thay đổi a, b có thay đổi a, b có thay đổi
7. Hàm và mảng dữ liệu
a. Truyền mảng 1 chiều cho hàm
Thông thường chúng ta hay xây dựng các hàm làm việc trên mảng như vectơ hay ma trận các phần tử. Khi đó tham đối thực sự của hàm sẽ là các mảng dữ liệu này. Trong trường hợp này ta có 2 cách khai báo đối. Cách thứ nhất đối được khai báo bình thường như khai báo biến mảng nhưng không cần có số phần tử kèm theo, ví dụ:
int x[];
float x[];
Cách thứ hai khai báo đối như một con trỏ kiểu phần tử mảng, ví dụ:
• int *p;
• float *p
Trong lời gọi hàm tên mảng a sẽ được viết vào danh sách tham đối thực sự, vì a là địa chỉ của phần tử đầu tiên của mảng a, nên khi hàm được gọi địa chỉ này sẽ gán cho con trỏ p. Vì vậy giá trị của phần tử thứ i của a có thể được truy cập bởi x[i] (theo khai báo 1) hoặc *(p+i) (theo khai báo 2) và nó cũng có thể được thay đổi thực sự (do đây cũng là cách truyền theo dẫn trỏ).
Sau đây là ví dụ đơn giản, nhập và in vectơ, minh hoạ cho cả 2 kiểu khai báo đối.
Ví dụ 8 : Hàm nhập và in giá trị 1 vectơ
void nhap(int x[], int n) // n: số phần tử
{
int i;
for (i=0; i<n; i++) cin >> x[i]; // hoặc cin >> *(x+i)
}
void in(int *p, int n)
{
int i;
for (i=0; i<n; i++) cout << *(p+i);
}
main()
{
int a[10] ; // mảng a chứa tối đa 10 phần tử
nhap(a,7); // vào 7 phần tử đầu tiên cho a
in(a,3); // ra 3 phần tử đầu tiên của a
}
b. Truyền mảng 2 chiều cho hàm
Đối với mảng 2 chiều khai báo đối cũng như lời gọi là phức tạp hơn nhiều so với mảng 1 chiều. Ta có hai cách khai báo đối như sau:
Khai báo theo đúng bản chất của mảng 2 chiều float x[m][n] do C++ qui định, tức x là mảng 1 chiều m phần tử, mỗi phần tử của nó có kiểu float[n]. Từ đó, đối được khai báo như một mảng hình thức 1 chiều (khồng cần số phần tử - ở đây là số dòng) của kiểu float[n]. Tức có thể khai báo như sau:
float x[][n] ; // mảng với số phần tử không định trước, mỗi phần tử là n số
float (*x)[n] ; // một con trỏ, có kiểu là mảng n số (float[n])
Để truy nhập đến đến phần tử thứ i, j ta vẫn sử dụng cú pháp x[i][j]. Tên của mảng a được viết bình thường trong lời gọi hàm. Nói chung theo cách khai báo này việc truy nhập là đơn giản nhưng phương pháp cũng có hạn chế đó là số cột của mảng truyền cho hàm phải cố định bằng n.
Xem mảng float x[m][n] thực sự là mảng một chiều float x[m*n] và sử dụng cách khai báo như trong mảng một chiều, đó là sử dụng con trỏ float *p để truy cập được đến từng phần tử của mảng. Cách này có hạn chế trong lời gọi: địa chỉ truyền cho hàm không phải là mảng a mà cần phải ép kiểu về (float*) (để phù hợp với p). Với cách này gọi k là thứ tự của phần tử a[i][j] trong mảng một chiều (m*n), ta có quan hệ giữa k, i, j như sau:
• k = *(p + i*n + j)
• i = k/n
• j = k%n
trong đó n là số cột của mảng truyền cho hàm. Điều này có nghĩa để truy cập đến a[i][j] ta có thể viết *(p+i*n+j), ngược lại biết chỉ số k có thể tính được dòng i, cột j của phần tử này. Ưu điểm của cách khai báo này là ta có thể truyền mảng với kích thước bất kỳ (số cột không cần định trước) cho hàm.
Sau đây là các ví dụ minh hoạ cho 2 cách khai báo trên.
Ví dụ 9 : Tính tổng các số hạng trong ma trận
float tong(float x[][10], int m, int n) // hoặc float tong(float (*x)[10], int m, int n)
{ // m: số dòng, n: số cột
float t = 0;
int i, j ;
for (i=0; i<m; i++)
for (j=0; j<n; j++) t += x[i][j] ;
return t;
}
main()
{
float a[8][10], b[5][7] ;
int i, j, ma, na, mb, nb;
cout << "nhập số dòng, số cột ma trận a: " ; cin >> ma >> na;
for (i=0; i<ma; i++) // nhập ma trận a
for (j=0; j<na; j++)
{ cout << "a[" << i << "," << j << "] = " ; cin >> a[i][j] ; }
cout << "nhập số dòng, số cột ma trận b: " ; cin >> mb >> nb;
for (i=0; i<mb; i++) // nhập ma trận b
for (j=0; j<nb; j++)
{ cout << "b[" << i << "," << j << "] = " ; cin >> b[i][j] ; }
cout << tong(a, ma, na); // in tổng các số trong ma trận
cout << tong(b, mb, nb); // sai vì số cột của b khác 10
}
Ví dụ 10 : Tìm phần tử bé nhất của ma trận
void minmt(float *x, int m, int n) // m: số dòng, n: số cột
{
float min = *x; // gán phần tử đầu tiên cho min
int k, kmin;
for (k=1; k<m*n; k++)
if (min > *(x+k)) { min = *(x+k) ; kmin = k; }
cout << "Giá trị min la: " << min << " tại dòng " << k/n << " cột " << k%n;
}
main()
{
float a[8][10], b[5][7] ;
int i, j ;
for (i=0; i<8; i++) // nhập ma trận a
for (j=0; j<10; j++)
{ cout << "a[" << i << "," << j << "] = " ; cin >> a[i][j] ; }
for (i=0; i<5; i++) // nhập ma trận b
for (j=0; j<7; j++)
{ cout << "b[" << i << "," << j << "] = " ; cin >> b[i][j] ; }
minmt((float*)a, 8, 10) ; // in giá trị và vị trí số bé nhất trong a
minmt((float*)b, 5, 7) ; // in giá trị và vị trí số bé nhất trong b
}
Ví dụ 11 : Cộng 2 ma trận và in kết quả.
void inmt(float *x, int m, int n)
{
int i, j;
for (i=0; i<m; i++)
{
for (j=0; j<n; j++) cout << *(x+i*n+j);
cout << endl;
}
}
void cong(float *x, float *y, int m, int n)
{
float *t = new float[m*n]; // t là ma trận kết quả (xem như dãy số)
int k, i, j ;
for (k = 0; k < m*n; k++) *(t+k) = *(x+k) + *(y+k) ;
inmt((float*)t, m, n);
}
main()
{
float a[8][10], b[5][7] ;
int i, j, m, n;
cout << "nhập số dòng, số cột ma trận: " ; cin >> m >> n;
for (i=0; i<m; i++) // nhập ma trận a, b
for (j=0; j<n; j++)
{
cout << "a[" << i << "," << j << "] = " ; cin >> a[i][j] ;
cout << "b[" << i << "," << j << "] = " ; cin >> b[i][j] ;
}
cong((float*)a, (float*)b, m, n); // cộng và in kết quả a+b
}
Xu hướng chung là chúng ta xem mảng (1 hoặc 2 chiều) như là một dãy liên tiếp các số trong bộ nhớ, tức một ma trận là một đối con trỏ trỏ đến thành phần của mảng. Đối với mảng 2 chiều m*n khi truyền đối địa chỉ của ma trận cần phải ép kiểu về kiểu con trỏ. Ngoài ra bước chạy k của con trỏ (từ 0 đến m*n-1) tương ứng với các toạ độ của phần tử a[i][j] trong mảng như sau:
• k = *(p + i*n + j)
• i = k/n
• j = k%n
từ đó, chúng ta có thể viết các hàm mà không cần phải băn khoăn gì về kích thước của ma trận sẽ truyền cho hàm.
c. Giá trị trả lại của hàm là một mảng
Không có cách nào để giá trị trả lại của một hàm là mảng. Tuy nhiên thực sự mỗi mảng cũng chính là một con trỏ, vì vậy việc hàm trả lại một con trỏ trỏ đến dãy dữ liệu kết quả là tương đương với việc trả lại mảng. Ngoài ra còn một cách dễ dùng hơn đối với mảng 2 chiều là mảng kết quả được trả lại vào trong tham đối của hàm (giống như nghiệm của phương trình bậc 2 được trả lại vào trong các tham đối). Ở đây chúng ta sẽ lần lượt xét 2 cách làm việc này.
1. Giá trị trả lại là con trỏ trỏ đến mảng kết quả. Trước hết chúng ta xét ví dụ nhỏ sau đây:
int* tragiatri1() // giá trị trả lại là con trỏ trỏ đến dãy số nguyên
{
int kq[3] = { 1, 2, 3 }; // tạo mảng kết quả với 3 giá trị 1, 2, 3
return kq ; // trả lại địa chỉ cho con trỏ kết quả hàm
}
int* tragiatri2() // giá trị trả lại là con trỏ trỏ đến dãy số nguyên
{
int *kq = new int[4]; // cấp phát 3 ô nhớ nguyên
*kq = *(kq+1) = *(kq+2) = 0 ; // tạo mảng kết quả với 3 giá trị 1, 2, 3
return kq ; // trả lại địa chỉ cho con trỏ kết quả hàm
}
main()
{
int *a, i;
a = tragiatri1();
for (i=0; i<3; i++) cout *(a+i); // không phải là 1, 2, 3
a = tragiatri2();
for (i=0; i<3; i++) cout *(a+i); // 1, 2, 3
}
Qua ví dụ trên ta thấy hai hàm trả giá trị đều tạo bên trong nó một mảng 3 số nguyên và trả lại địa chỉ mảng này cho con trỏ kết quả hàm. Tuy nhiên, chỉ có tragiatri2() là cho lại kết quả đúng. Tại sao ? Xét mảng kq được khai báo và khởi tạo trong tragiatri1(), đây là một mảng cục bộ (được tạo bên trong hàm) như sau này chúng ta sẽ thấy, các loại biến "tạm thời" này (và cả các tham đối) chỉ tồn tại trong quá trình hàm hoạt động. Khi hàm kết thúc các biến này sẽ mất đi. Do vậy tuy hàm đã trả lại địa chỉ của kq trước khi nó kết thúc, thế nhưng sau khi hàm thực hiện xong, toàn bộ kq sẽ được xoá khỏi bộ nhớ và vì vậy con trỏ kết quả hàm đã trỏ đến vùng nhớ không còn các giá trị như kq đã có. Từ điều này việc sử dụng hàm trả lại con trỏ là phải hết sức cẩn thận. Muốn trả lại con trỏ cho hàm thì con trỏ này phải trỏ đến dãy dữ liệu nào sao cho nó không mất đi sau khi hàm kết thúc, hay nói khác hơn đó phải là những dãy dữ liệu được khởi tạo bên ngoài hàm hoặc có thể sử dụng theo phương pháp trong hàm tragiatri2(). Trong tragiatri2() một mảng kết quả 3 số cũng được tạo ra nhưng bằng cách xin cấp phát vùng nhớ. Vùng nhớ được cấp phát này sẽ vẫn còn tồn tại sau khi hàm kết thúc (nó chỉ bị xoá đi khi sử dụng toán tử delete). Do vậy hoạt động của tragiatri2() là chính xác.
Tóm lại, ví dụ trên cho thấy nếu muốn trả lại giá trị con trỏ thì vùng dữ liệu mà nó trỏ đến phải được cấp phát một cách tường minh (bằng toán tử new), chứ không để chương trình tự động cấp phát và tự động thu hồi. Ví dụ sau minh hoạ hàm cộng 2 vectơ và trả lại vectơ kết quả (thực chất là con trỏ trỏ đến vùng nhớ đặt kết quả)
int* congvt(int *x, int *y, int n) // n số phần tử của vectơ
{
int* z = new int[n]; // xin cấp phát bộ nhớ
for (int i=0; i<n; i++) z[i] = x[i] + y[i];
return c;
}
main()
{
int i, n, a[10], b[10], c[10] ;
cout << "n = " ; cin >> n; // nhập số phần tử
for (i=0; i<n; i++) cin >> a[i] ; // nhập vectơ a
for (i=0; i<n; i++) cin >> b[i] ; // nhập vectơ b
c = congvt(a, b, n);
for (i=0; i<n; i++) cout << c[i] ; // in kết quả
}
Chú ý: a[i], b[i], c[i] còn được viết dưới dạng tương đương *(a+i), *(b+i), *(c+i).
2. Trong cách này, mảng cần trả lại được khai báo như một tham đối trong danh sách đối của hàm. Tham đối này là một con trỏ nên hiển nhiên khi truyền mảng đã khai báo sẵn (để chứa kết quả) từ ngoài vào cho hàm thì mảng sẽ thực sự nhận được nội dung kết quả (tức có thay đổi trước và sau khi gọi hàm - xem mục truyền tham đối thực sự theo dẫn trỏ). Ở đây ta xét 2 ví dụ: bài toán cộng 2 vectơ trong ví dụ trước và nhân 2 ma trận.
Ví dụ 12 : Cộng 2 vectơ, vectơ kết quả trả lại trong tham đối của hàm. So với ví dụ trước giá trị trả lại là void (không trả lại giá trị) còn danh sách đối có thêm con trỏ z để chứa kết quả.
void congvt(int *x, int *y, int *z, int n) // z lưu kết quả
{
for (int i=0; i<n; i++) z[i] = x[i] + y[i];
}
main()
{
int i, n, a[10], b[10], c[10] ;
cout << "n = " ; cin >> n; // nhập số phần tử
for (i=0; i<n; i++) cin >> a[i] ; // nhập vectơ a
for (i=0; i<n; i++) cin >> b[i] ; // nhập vectơ b
congvt(a, b, c, n);
for (i=0; i<n; i++) cout << c[i] ; // in kết quả
}
Ví dụ 13 : Nhân 2 ma trận kích thước m*n và n*p. Hai ma trận đầu vào và ma trận kết quả (kích thước m*p) đều được khai báo dưới dạng con trỏ và là đối của hàm nhanmt(). Nhắc lại, trong lời gọi hàm địa chỉ của 3 mảng cần được ép kiểu về (int*) để phù hợp với các con trỏ tham đối.
void nhanmt(int *x, int *y, int *z, int m, int n, int p) // z lưu kết quả
{
int i, j, k ;
for (i=0; i<m; i++)
for (j=0; j<p; j++)
{
*(z+i*p+j) = 0; // tức z[i][j] = 0
for (k=0; k<n; k++)
*(z+i*p+j) += *(x+i*n+k)**(y+k*p+j) ; // tức z[i][j] += x[i][k]*y[k][j]
}
}
main()
{
int a[10][10], b[10][10], c[10][10] ; // khai báo 3 mảng a, b, c
int m, n, p ; // kích thước các mảng
cout << "m, n, p = " ; cin >> m >> n >> p ; // nhập số phần tử
for (i=0; i<m; i++) // nhập ma trận a
for (j=0; j<n; j++)
cout << "a[" << i << "," << j << "] = " ; cin >> a[i][j] ;
for (i=0; i<n; i++) // nhập ma trận b
for (j=0; j<p; j++)
cout << "b[" << i << "," << j << "] = " ; cin >> b[i][j] ;
nhanmt((int*)a, (int*)b, (int*)c, m, n, p); // gọi hàm
for (i=0; i<m; i++) // in kết quả
{
for (j=0; j<p; j++) cout << c[i][j] ;
cout << endl;
}
}
d. Đối và giá trị trả lại là xâu kí tự
Giống các trường hợp đã xét với mảng 1 chiều, đối của các hàm xâu kí tự có thể khai báo dưới 2 dạng: mảng kí tự hoặc con trỏ kí tự. Giá trị trả lại luôn luôn là con trỏ kí tự. Ngoài ra hàm cũng có thể trả lại giá trị vào trong các đối con trỏ trong danh sách đối.
Ví dụ sau đây dùng để tách họ, tên của một xâu họ và tên. Ví dụ gồm 3 hàm. Hàm họ trả lại xâu họ (con trỏ kí tự) với đối là xâu họ và tên được khai báo dạng mảng. Hàm tên trả lại xâu tên (con trỏ kí tự) với đối là xâu họ và tên được khai báo dạng con trỏ kí tự. Thực chất đối họ và tên trong hai hàm họ, tên có thể được khai báo theo cùng cách thức, ở đây chương trình muốn minh hoạ các cách khai báo đối khác nhau (đã đề cập đến trong phần đối mảng 1 chiều). Hàm thứ ba cũng trả lại họ, tên nhưng cho vào trong danh sách tham đối, do vậy hàm không trả lại giá trị (void). Để đơn giản ta qui ước xâu họ và tên không chứa các dấu cách đầu và cuối xâu, trong đó họ là dãy kí tự từ đầu cho đến khi gặp dấu cách đầu tiên và tên là dãy kí tự từ sau dấu cách cuối cùng đến kí tự cuối xâu.
char* ho(char hoten[]) // hàm trả lại họ
{
char* kq = new char[10]; // cấp bộ nhớ để chứa họ
int i=0;
while (hoten[i] != '\40') i++; // i dừng tại dấu cách đầu tiên
strncpy(kq, hoten, i) ; // copy i kí tự của hoten vào kq
return kq;
}
char* ten(char* hoten) // hàm trả lại tên
{
char* kq = new char[10]; // cấp bộ nhớ để chứa tên
int i=strlen(hoten);
while (hoten[i] != '\40') i--; // i dừng tại dấu cách cuối cùng
strncpy(kq, hoten+i+1, strlen(hoten)-i-1) ; // copy tên vào kq
return kq;
}
void tachht(char* hoten, char* ho, char* ten)
{
int i=0;
while (hoten[i] != '\40') i++; // i dừng tại dấu cách đầu tiên
strncpy(ho, hoten, i) ; // copy i kí tự của hoten vào ho
i=strlen(hoten);
while (hoten[i] != '\40') i--; // i dừng tại dấu cách cuối cùng
strncpy(ten, hoten+i+1, strlen(hoten)-i-1) ; // copy tên vào ten
}
main()
{
char ht[30], *h, *t ; // các biến họ tên, họ, tên
cout << "Họ và tên = " ; cin.getline(ht,30) ; // nhập họ tên
h = ho(ht); t = ten(ht);
cout << "Họ = " << h << ", tên = " << t << endl;
tachht(ht, h, t);
cout << "Họ = " << h << ", tên = " << t << endl;
}
e. Đối là hằng con trỏ
Theo phần truyền đối cho hàm ta đã biết để thay đổi biến ngoài đối tương ứng phải được khai báo dưới dạng con trỏ. Tuy nhiên, trong nhiều trường hợp các biến ngoài không có nhu cầu thay đổi nhưng đối tương ứng với nó vẫn phải khai báo dưới dạng con trỏ (ví dụ đối là mảng hoặc xâu kí tự). Điều này có khả năng do nhầm lẫn, các biến ngoài này sẽ bị thay đổi ngoài ý muốn. Trong trường hợp như vậy để cẩn thận, các đối con trỏ nếu không muốn thay đổi (chỉ lấy giá trị) cần được khai báo như là một hằng con trỏ bằng cách thêm trước khai báo kiểu của chúng từ khoá const. Từ khoá này khẳng định biến tuy là con trỏ nhưng nó là một hằng không thay đổi được giá trị. Nếu trong thân hàm ta cố tình thay đổi chúng thì chương trình sẽ báo lỗi. Ví dụ đối hoten trong cả 3 hàm ở trên có thể được khai báo dạng const char* hoten.
Ví dụ 14 : Đối là hằng con trỏ. In hoa một xâu kí tự
void inhoa(const char* s)
{
char *t;
strcpy(t, s);
cout << s << strupr(t); // không dùng được strupr(s)
}
main()
{
char *s = "abcde" ;
inhoa(s); // abcdeABCDE
}
8. Con trỏ hàm
Một hàm (tập hợp các lệnh) cũng giống như dữ liệu: có tên gọi , có địa chỉ lưu trong bộ nhớ và có thể truy nhập đến hàm thông qua tên gọi hoặc địa chỉ của nó. Để truy nhập (gọi hàm) thông qua địa chỉ chúng ta phải khai báo một con trỏ chứa địa chỉ này và sau đó gọi hàm bằng cách gọi tên con trỏ.
a. Khai báo
<kiểu giá trị> (*tên biến hàm)(d/s tham đối);
<kiểu giá trị> (*tên biến hàm)(d/s tham đối) = <tên hàm>;
Ta thấy cách khai báo con trỏ hàm cũng tương tự khai báo con trỏ biến (chỉ cần đặt dấu * trước tên), ngoài ra còn phải bao *tên hàm giữa cặp dấu ngoặc (). Ví dụ:
float (*f)(int); // khai báo con trỏ hàm có tên là f trỏ đến hàm
// có một tham đối kiểu int và cho giá trị kiểu float.
void (*f)(float, int); // con trỏ trỏ đến hàm với cặp đối (float, int).
hoặc phức tạp hơn:
char* (*m[10])(int, char) // khai báo một mảng 10 con trỏ hàm trỏ đến
// các hàm có cặp tham đối (int, char), giá trị trả
// lại của các hàm này là xâu kí tự.
Chú ý: phân biệt giữa 2 khai báo: float (*f)(int) và float *f(int). Cách khai báo trước là khai báo con trỏ hàm có tên là f. Cách khai báo sau có thể viết lại thành float* f(int) là khai báo hàm f với giá trị trả lại là một con trỏ float.
b. Khởi tạo
Một con trỏ hàm cũng giống như các con trỏ, được phép khởi tạo trong khi khai báo hoặc gán với một địa chỉ hàm cụ thể sau khi khai báo. Cũng giống như kiểu dữ liệu mảng, tên hàm chính là một hằng địa chỉ trỏ đến bản thân nó. Do vậy cú pháp của khởi tạo cũng như phép gán là như sau:
biến con trỏ hàm = tên hàm;
trong đó f và tên hàm được trỏ phải giống nhau về kiểu trả lại và danh sách đối. Nói cách khác với mục đích sử dụng con trỏ f trỏ đến hàm (lớp hàm) nào đó thì f phải được khai báo với kiểu trả lại và danh sách đối giống như hàm đó. Ví dụ:
float luythua(float, int); // khai báo hàm luỹ thừa
float (*f)(float, int); // khai báo con trỏ f tương thích với hàm luythua
f = luythua; // cho f trỏ đến hàm luỹ thừa
c. Sử dụng con trỏ hàm
Để sử dụng con trỏ hàm ta phải gán nó với tên hàm cụ thể và sau đó bất kỳ nơi nào được phép xuất hiện tên hàm thì ta đều có thể thay nó bằng tên con trỏ. Ví dụ như các thao tác gọi hàm, đưa hàm vào làm tham đối hình thức cho một hàm khác … Sau đây là các ví dụ minh hoạ.
Ví dụ 15 : Dùng tên con trỏ để gọi hàm
float bphuong(float x) // hàm trả lại x2
{
return x*x;
}
void main()
{
float (*f)(float);
f = bphuong;
cout << "Bình phương của 3.5 là " << f(3.5) ;
}
Ví dụ 16 : Dùng hàm làm tham đối. Tham đối của hàm ngoài các kiểu dữ liệu đã biết còn có thể là một hàm. Điều này có tác dụng rất lớn trong các bài toán tính toán trên những đối tượng là hàm toán học như tìm nghiệm, tính tích phân của hàm trên một đoạn ... Hàm đóng vai trò tham đối sẽ được khai báo dưới dạng con trỏ hàm. Ví dụ sau đây trình bày hàm tìm nghiệm xấp xỉ của một hàm liên tục và đổi dấu trên đoạn [a, b]. Để hàm tìm nghiệm này sử dụng được trên nhiều hàm toán học khác nhau, trong hàm sẽ chứa một biến con trỏ hàm và hai cận a, b, cụ thể bằng khai báo float timnghiem(float (*f)(float), float a, float b). Trong lời gọi hàm f sẽ được thay thế bằng tên hàm cụ thể cần tìm nghiệm.
#define EPS 1.0e-6
float timnghiem(float (*f)(float), float a, float b);
float emu(float);
float loga(float);
void main()
{
clrscr();
cout << "Nghiệm của e mũ x - 2 trên đoạn [0,1] = ";
cout << timnghiem(emu,0,1));
cout << "Nghiệm của loga(x) - 1 trên đoạn [2,3] = ";
cout << timnghiem(loga,2,3));
getch();
}
float timnghiem(float (*f)(float), float a, float b)
{
float c = (a+b)/2;
while (fabs(a-b)>EPS && f(c)!=0)
{
if (f(a)*f(c)>0) a = c ; else b = c;
c = (a+b)/2;
}
return c;
}
float emux(float x) { return (exp(x)-2); }
float logx(float x) { return (log(x)-1); }
d. Mảng con trỏ hàm
Tương tự như biến bình thường các con trỏ hàm giống nhau có thể được gộp lại vào trong một mảng, trong khai báo ta chỉ cần thêm [n] vào sau tên mảng với n là số lượng tối đa các con trỏ. Ví dụ sau minh hoạ cách sử dụng này. Trong ví dụ chúng ta xây dựng 4 hàm cộng, trừ, nhân, chia 2 số thực. Các hàm này giống nhau về kiểu, số lượng đối, … Chúng ta có thể sử dụng 4 con trỏ hàm riêng biệt để trỏ đến các hàm này hoặc cũng có thể dùng mảng 4 con trỏ để trỏ đến các hàm này. Chương trình sẽ in ra kết quả cộng, trừ, nhân, chia của 2 số nhập vào từ bàn phím.
Ví dụ 17 :
void cong(int a, int b) { cout << a << " + " << b << " = " << a+b ; }
void tru(int a, int b) { cout << a << " - " << b << " = " << a-b ; }
void nhan(int a, int b) { cout << a << " x " << b << " = " << a*b ; }
void chia(int a, int b) { cout << a << ": " << b << " = " << a/b ; }
main()
{
clrscr();
void (*f[4])(int, int) = {cong, tru, nhan, chia}; // khai báo, khởi tạo 4 con trỏ
int m, n;
cout "Nhập m, n " ; cin >> m >> n ;
for (int i=0; i<4; i++) f[i](m,n);
getch();
}
III. ĐỆ QUI
1. Khái niệm đệ qui
Một hàm gọi đến hàm khác là bình thường, nhưng nếu hàm lại gọi đến chính nó thì ta gọi hàm là đệ qui. Khi thực hiện một hàm đệ qui, hàm sẽ phải chạy rất nhiều lần, trong mỗi lần chạy chương trình sẽ tạo nên một tập biến cục bộ mới trên ngăn xếp (các đối, các biến riêng khai báo trong hàm) độc lập với lần chạy trước đó, từ đó dễ gây tràn ngăn xếp. Vì vậy đối với những bài toán có thể giải được bằng phương pháp lặp thì không nên dùng đệ qui.
Để minh hoạ ta hãy xét hàm tính n giai thừa. Để tính n! ta có thể dùng phương pháp lặp như sau:
main()
{
int n; doule kq = 1;
cout << "n = " ; cin >> n;
for (int i=1; i<=n; i++) kq *= i;
cout << n << "! = " << kq;
}
Mặt khác, n! giai thừa cũng được tính thông qua (n-1)! bởi công thức truy hồi
n! = 1 nếu n = 0
n! = (n-1)!n nếu n > 0
do đó ta có thể xây dựng hàm đệ qui tính n! như sau:
double gt(int n)
{
if (n==0) return 1;
else return gt(n-1)*n;
}
main()
{
int n;
cout << "n = " ; cin >> n;
cout << gt(n);
}
Trong hàm main() giả sử ta nhập 3 cho n, khi đó để thực hiện câu lệnh cout << gt(3) để in 3! đầu tiên chương trình sẽ gọi chạy hàm gt(3). Do 3 0 nên hàm gt(3) sẽ trả lại giá trị gt(2)*3, tức lại gọi hàm gt với tham đối thực sự ở bước này là n = 2. Tương tự gt(2) = gt(1)*2 và gt(1) = gt(0)*1. Khi thực hiện gt(0) ta có đối n = 0 nên hàm trả lại giá trị 1, từ đó gt(1) = 1*1 = 1 và suy ngược trở lại ta có gt(2) = gt(1)*2 = 1*2 = 2, gt(3) = gt(2)*3 = 2*3 = 6, chương trình in ra kết quả 6.
Từ ví dụ trên ta thấy hàm đệ qui có đặc điểm:
Chương trình viết rất gọn,
Việc thực hiện gọi đi gọi lại hàm rất nhiều lần phụ thuộc vào độ lớn của đầu vào. Chẳng hạn trong ví dụ trên hàm được gọi n lần, mỗi lần như vậy chương trình sẽ mất thời gian để lưu giữ các thông tin của hàm gọi trước khi chuyển điều khiển đến thực hiện hàm được gọi. Mặt khác các thông tin này được lưu trữ nhiều lần trong ngăn xếp sẽ dẫn đến tràn ngăn xếp nếu n lớn.
Tuy nhiên, đệ qui là cách viết rất gọn, dễ viết và đọc chương trình, mặt khác có nhiều bài toán hầu như tìm một thuật toán lặp cho nó là rất khó trong khi viết theo thuật toán đệ qui thì lại rất dễ dàng.
2. Lớp các bài toán giải được bằng đệ qui
Phương pháp đệ qui thường được dùng để giải các bài toán có đặc điểm:
Giải quyết được dễ dàng trong các trường hợp riêng gọi là trường hợp suy biến hay cơ sở, trong trường hợp này hàm được tính bình thường mà không cần gọi lại chính nó,
Đối với trường hợp tổng quát, bài toán có thể giải được bằng bài toán cùng dạng nhưng với tham đối khác có kích thước nhỏ hơn tham đối ban đầu. Và sau một số bước hữu hạn biến đổi cùng dạng, bài toán đưa được về trường hợp suy biến.
Như vậy trong trường hợp tính n! nếu n = 0 hàm cho ngay giá trị 1 mà không cần phải gọi lại chính nó, đây chính là trường hợp suy biến. Trường hợp n > 0 hàm sẽ gọi lại chính nó nhưng với n giảm 1 đơn vị. Việc gọi này được lặp lại cho đến khi n = 0.
Một lớp rất rộng của bài toán dạng này là các bài toán có thể định nghĩa được dưới dạng đệ qui như các bài toán lặp với số bước hữu hạn biết trước, các bài toán UCLN, tháp Hà Nội, ...
3. Cấu trúc chung của hàm đệ qui
Dạng thức chung của một chương trình đệ qui thường như sau:
if (trường hợp suy
Chuong4- Ham va chuong trinh
Trang
1
trong tổng số
1
trang
Similar topics
Similar topics
»
Những giọt tình long lanh
»
Tiệc mừng Tân Gia - bạn Lương 12C1
»
[ĐBCB] Phỏng vấn BIGBANG trên tạp chí SPUR {Ấn bản tháng 8}
»
[23/5/15][News] "Happy Together 3" với sự tham gia của BIGBANG có tỷ suất xem đài thấp nhất trong lịch sử?
»
[26/5/15][News] PD của Running Man chia sẻ về buổi ghi hình cùng BIGBANG
Permissions in this forum:
Bạn
không có quyền
trả lời bài viết
๑۩۞۩๑ ♥(¯`•▒»¦ηЋǿċ_ßµị_¦«▒• ´¯)♥๑۩۞۩๑
::
Lập trình
๑۩۞۩๑ ♥(¯`•▒»¦ηЋǿċ_ßµị_¦«▒• ´¯)♥๑۩۞۩๑
::
Lập trình
Chuyển đến
:
Chọn Diễn Đàn
|
|--Chem gio
|--Rap Love
|--(¯`•™»♀•◦○Łö\/£○◦•♂«™•´¯)
| |--«´¨`•..¤ My :Friends¤..•´¨`»
|
|--Lập trình
|--Chia sẻ tài liệu
| |--Công nghệ
|
|--Phần mềm
Free forum
|
©
phpBB
|
Free forum support
|
Liên hệ
|
Report an abuse
|
Have a free blog with Sosblogs

P3P: CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"

Cache-Control: no-cache

Vary: User-Agent


markdown:
Các căn hộ có diện tích 32, 36, 42, 45, 52m2 thiết kế 1-2 phòng ngủ, trang bị sẵn nội thất (như trong ảnh). Giá bán chỉ từ 530 triệu đến 910 triệu.
Đ/c: đường Xuân La, Tây Hồ, Hà Nội cách hồ Tây 800m gần trục đường V&oti
[Cầu Giấy](http://land24.vn/ban-can-ho-chung-cu-cau-giay)te; Công, Hoàng Quốc Việt, Cầu Giấy thuận tiện giao thông đi lại.
Liên hệ: 0988.488.263

WARC-Type: response

Content-Type: application/http; msgtype=response

WARC-Truncated: length

WARC-Identified-Payload-Type: text/html

Server: nginx

Connection: close

Pragma: no-cache

X-FRAME-OPTIONS: DENY

Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0

Set-Cookie: land24_root=1fbniclo1fdeho3og9cnml1303; expires=Wed, 23-May-2018 13:22:04 GMT; Max-Age=31536000

Vary: Accept-Encoding

Content-Type: text/html; charset=UTF-8


markdown:
[](http://www.dulichdalat.pro/) ![tour du lich da lat gia re tour du lich da lat gia re](http://khachsandalat.net/wp-content/uploads/2017/04/banner-khach-san-da-lat-1.jpg)
![tour du lich da lat gia re tour du lich da lat gia re](http://khachsandalat.net/wp-content/uploads/2017/04/banner-khach-san-da-lat-1.jpg)
Đặt
[Khach San Da Lat](http://khachsandalat.net/)giá rẻ cùng [khách sạn đà lạt 3 sao](http://khachsandalat.net/Hotel-3-Sao.html)gần hồ xuân hương tại website [Khachsandalat.pro](http://khachsandalat.pro/)tặng [tour du lịch đà lạt](http://khachsandalat.pro/du-lich-da-lat)130k
# khách sạn rẻ và đẹp gần đường Giải Phóng, Hà Nội
Thảo luận trong '
[Khách Sạn](forums/khach-san.20/)' bắt đầu bởi [nguyenlinh2365](members/nguyenlinh2365.4404/), 2/12/16.
Lượt xem: 69

X-Frame-Options: SAMEORIGIN

Cache-Control: private, max-age=0

Vary: Accept-Encoding,User-Agent


markdown:
**lượt nghe** -
Được tổng hợp dựa trên số liệu lượt nghe của người dùng trên cả desktop, mobile và smart TV
Vui lòng chọn cụ thể các mục bên dưới để thông báo cho Zing MP3 biết vấn dề bạn gặp phải đối với bài hát này.
Để thông báo vi phạm bản quyền, vui lòng
[click vào đây](http://mp3.zing.vn/copyright/report) (To file a copyright infringement notification, please [click here](http://mp3.zing.vn/copyright/report))
Bài hát này không tải được vì lý do bản quyền
Trải nghiệm
**chất lượng âm thanh** tương tự nghe CD gốc với tài khoản **Zing MP3 VIP**.
Đóng góp:
[Lời bài hát](#) | [Karaoke lyrics](#)
## Bình luận ()

Cache-Control: private


markdown:
**Lời Vàng:**"Qua sông nhờ được cầu Lam, Tu-hành nào đợi chùa am làm gì." Đức Thầy [NAM MÔ A DI ĐÀ PHẬT](http://nammoadidaphat.org/home/index.php?PHPSESSID=b89hhmrbk47hadg4f0li7gfeo1&)« [THU' VIEN](http://nammoadidaphat.org/home/index.php?PHPSESSID=b89hhmrbk47hadg4f0li7gfeo1&action=forum)« [THÔNG TIN & HƯỚNG DẪN](http://nammoadidaphat.org/home/index.php?PHPSESSID=b89hhmrbk47hadg4f0li7gfeo1&action=forum;#c4)« [ADMIN BLOG](http://nammoadidaphat.org/home/index.php?PHPSESSID=b89hhmrbk47hadg4f0li7gfeo1&board=39.0)«
- Sinh Hoạt Giáo Lý PG Hòa Hảo
|
|
[Portal Management Extension PortaMx™ v0.956](http://portamx.com)| [PortaMx © 2008-2009 by PortaMx corp.](http://portamx.com/?license)

WARC-Identified-Payload-Type: application/xhtml+xml


markdown: Tần Thủy Hoàng, tên thật là Doanh Chính, còn có tên khác là Triệu Chính, là vua nước Tần ở Trung Quốc từ năm 246 TCN đến 221 TCN trong thời kỳ Chiến Quốc và trở thành vị Hoàng đế sáng lập ra nhà Tần, đồng thời là hoàng đế đầu tiên của Trung Quốc thống nhất vào năm 221 trước Công nguyên sau khi tiêu diệt các nước chư hầu khác. Ông cai trị cho đến khi qua đời vào năm 210 trước Công nguyên ở tuổi 49. Tần Thủy Hoàng sẵn sàng giết người thân cận để bảo toàn bí mật, ám sát hoàng thân, thiêu đốt dân quân để đoạt mộng làm chủ thiên hạ... nhưng lại vô cùng sợ cái chết. Đến cuối đời Tần Thủy Hoàng chỉ mải mê theo đuổi phương thức trường sinh bất lão. Những năm cuối đời, Tần Thủy Hoàng lo sợ sẽ từ giã cõi đời sớm mà tuyệt vọng tìm kiếm thuốc trường sinh, được cho là sẽ giúp ông sống và an vị mãi mãi. Và một trong những vị thuốc kịch độc được giới nghiên cứu cho là nguyên nhân gây nên cái chết của Vua Tần chính là thủy ngân. Một số nguồn sử kí cho rằng, Thủy Hoàng đã uống các viên thuốc trường sinh có nguyên liệu từ thủy ngân để biến mình thành bất tử. Song chính những thứ đó đã gây nên cái chết oan ức cho vị vua này. Trước khi chết, đã có 3 sự kiện kỳ lạ xuất hiện mà theo dân gian truyền tụng rằng đây là điềm báo về việc lìa giã cõi đời của Tần Thủy Hoàng. Chiêm tinh dự đoán cái chết của Tần Thủy Hoàng Các bậc đế vương Trung Hoa tự nhận mình là "thiên tử", tức con trời. Bởi lẽ vì vậy mà các đời vua trị vì đều coi trọng việc chiêm tinh. Những hiện tượng thiên văn đặc biệt đều xuất hiện theo ý trời, là thiên ý không thể làm khác. Hiện tượng 'Huỳnh hoặc thủ tâm'. Dựa vào sử lý và các thuật toán hiện đại, các nhà nghiên cứu Trung Quốc đã khẳng định vào năm 210 trước Công Nguyên là năm Tần Thủy Hoàng băng hà, huỳnh hoặc thủ tâm đã xuất hiện. Hiện tượng này bị xem là "đại hung chi triệu", điềm báo có tai họa lớn, nhẹ thì Hoàng đế mất ngôi, nghiêm trọng thì nhà vua băng hà. Người xưa gọi sao Hỏa là "huỳnh hoặc" hay "tâm túc" là "chòm sao bọ cạp" của thiên văn học hiện đại. Thiên thạch rơi Năm 211 trước Công nguyên, sát năm vị vua nhà Tần băng hà, một thiên thạch đã rơi xuống vị trí Đông Quận, một phần của lành thổ nước Tần tiếp giáp giữa 2 nước Tần - Tề, nay thuộc thành phố Bộc Dương, tỉnh Hà Nam (Trung Quốc). Tương truyền một thiên thạch rơi vào sát năm Tần Thủy Hoàng băng hà. Trên thiên thạch có người khắc 7 chữ "Thủy Hoàng Đế tử nhi địa phân", nghĩa là sau khi Hoàng đế Tần Thủy Hoàng chết, quốc gia sẽ lại xuất hiện chiến loạn và triều Tần theo đó mà diệt vong. Tần Thủy Hoàng biết được liền phái người đi điều tra. Tuy nhiên, không ai nhận là người đã viết dòng chữ trên nên vua sai giết tất cả những người sống gần đó. Tảng thiên thạch sau đó cũng bị đốt cháy và nghiền thành bột. Ngọc bích rơi xuống sông rồi lại trở về Mùa Thu năm Tần Thủy Hoàng băng hà, một vị sứ giả từ Quan Đông đi đường đêm ngang qua con đường "Hoa âm bình thư", trong lúc ấy có một người tay cầm ngọc bích đã chặn sứ giả lại, yêu cầu sứ giả mang viên ngọc bích này trong tay ông rồi dâng lên vua Tần. Sự kiện "trầm bích" nói về việc Tần Thủy Hoàng nhận lại ngọc bích đã thả xuống sông và được biết điềm gở. Người này cũng nói, "kim niên Tổ Long Tử, tức là năm nay Rồng Tổ sẽ chết. Sứ giả hỏi nguyên do thì người này đã biến mất. Tần Thủy Hoàng sau khi được nghe sứ giả thuật lại liền hiểu rằng Tổ Long ám chỉ mình. Ông cho người kiểm tra lại miếng ngọc thì bàng hoàng phát hiện ra đó chính là miếng ngọc năm năm 28 tuổi vua Tần thả xuống sông để tế Thủy Thần trong lúc ra ngoài tuần tra. Năm 210 trước Công nguyên, ông đột ngột qua đời tại hành cung Sa Khâu, bí mật nhà vua băng hà khi đang ở ngoài hoàng cung sau đó cũng được người thân tín giữ kín. M.V Từ khóa: Tần Thủy Hoàng qua đời tần thủy hoàng cái chết của tần thủy hoàng điểm báo cái chết tần thủy hoàng lìa giã cõi đời Bình luận * Vui lòng nhập bình luận tiếng Việt có dấu Nhập lại Gửi

Content-Type: text/html; charset=utf-8

Set-Cookie: .ASPXANONYMOUS=6OVzuI-_WU7-FHDC8TTfZ3UpONpWSzM0_dqX1sTU40WoSbuxYvDnDUyrlsnmNAV47pGgh1RAB7VPdxj436srnOTGntVYnfeL2Ng1twwCBr669ouv6N3FR4Rd1RxXAsJ5PVYzBL1WGFLjxyVt7DRoOA2; domain=ngaynay.epi.vn; expires=Mon, 31-Jul-2017 23:25:16 GMT; path=/; HttpOnly

X-Cache: MISS from xCache11-02


markdown: Delta Aquarids diễn ra hàng năm từ 12/7 đến 23/8. Tại Việt Nam, theo ông Đặng Vũ Tuấn Sơn (Chủ nhiệm câu lạc bộ thiên văn học trẻ), cực điểm của trận mưa sao băng là từ 2h sáng đến trước khi trời sáng ngày 28 và 29/7. Thời điểm này, người xem có thể hướng về phía nam nơi có chòm sao Aquarius (Bảo Bình) - tâm điểm của trận mưa sao băng, gần một trong những ngôi sao sáng nhất của chòm là Delta. Người xem nên hướng về tâm điểm của trận mưa sao băng là chòm sao Aquarius. Ảnh: Universetoday. Các chuyên gia thiên văn đánh giá đây là trận mưa sao băng trung bình với mật độ cực điểm từ 15 đến 20 sao băng mỗi giờ trong điều kiện quan sát tối ưu, không trăng, trời nắng nóng và không mây. Người xem chỉ cần sử dụng mắt thường, chọn nơi góc nhìn rộng và tư thế thoải mái để quan sát. Mưa sao băng Delta Aquariids bắt nguồn từ những mảnh vụn đá bụi để lại bởi sao chổi 96P Machholz trên quỹ đạo của nó quanh mặt trời, do nhà thiên văn Donald Machholz phát hiện năm 1986. Theo VnExpress Từ khóa: Bình luận * Vui lòng nhập bình luận tiếng Việt có dấu Nhập lại Gửi

Set-Cookie: .ASPXANONYMOUS=eWgrSEI5PJt00_vb2tEZ7sjk1_9DoJ7lqRXz1KBomQM4srNR2kSQXcYR8k7BA2-WVSsppboL95FvoD_1HpUovplh6KeokoW7zdR6B3HmXj3hoErzndgEC7Ocjh5Ff8l9wIXP1tpTrs3FUTrntg2TVQ2; domain=ngaynay.epi.vn; expires=Mon, 31-Jul-2017 23:15:09 GMT; path=/; HttpOnly

X-Cache: MISS from xCache11-01


markdown: Dùng hổ và sư tử làm thú cưng, cảnh sát đi xe Lamborghini, cho thú cưng ăn cá mập sống hay cây ATM rút vàng miếng tự động… là những điều chỉ có ở Dubai, một trong 7 tiểu quốc thuộc Các Tiểu vương quốc Ả rập Thống nhất UAE. Khung cảnh lộng lẫy của Dubai. Có vị thế chiến lược và sở hữu cảng biển thuộc top 10 cảng quan trọng nhất thế giới đã khiến Dubai trở thành trung tâm thương mại giàu mạnh. Quốc gia này chủ yếu giàu lên nhờ dầu mỏ và khí đốt. Trên mảnh đất thịnh vượng như Dubai, người lần đầu tiên tới đây sẽ phải “mắt tròn mắt dẹt” chứng kiến những hình ảnh xa xỉ tới mức điên rồ mà không nơi nào có. Thú chơi đẳng cấp nuôi sư tử, hổ, báo Giới nhà giàu Dubai thường rất chuộng nuôi sư tử, hổ và báo. Họ cho rằng những con vật này là biểu tượng của quyền lực, sự giàu sang, thể hiện sức mạnh và lòng can đảm. Mỗi con "thú cưng" này thường có giá khoảng trên 5.000USD. Thú chơi khác người thể hiện đẳng cấp và sự giàu sang. Khách sạn dát vàng Khách sạn Burj Al Arab là một trong những khách sạn xa xỉ bậc nhất trên thế giới. 1.695m2 bên trong khách sạn được phủ những lá vàng 24carat, từ chân ghế cho tới 28.000 bóng đèn. Nhiều tỷ phú nổi tiếng thường chọn Burj Al Arab để nghỉ ngơi. Bên trong khách sạn. Mỗi người được phát một chiếc iPad dát vàng để sử dụng trong thời gian tại khách sạn. Vàng giao dịch tính bằng... tấn Ước tính mỗi ngày có hơn 10 tấn vàng được bày bán và giao dịch tại Dubai với mức giá rẻ nhất thế giới. Nổi tiếng nhất tại đây là khu chợ Gold Souk chuyên bán vàng và các kim loại quý gồm kim cương, platinum, bạc. Một tiệm vàng ở Dubai. Người Dubai dát vàng mọi thứ, từ xe, điện thoại cho tới... đồ ăn. Dưỡng da bằng mặt nạ vàng Mặt nạ bằng vàng 24 carat được cho là có tác dụng hồi sinh và trẻ hóa làn da. Nhiều phụ nữ sẵn sàng bỏ ra khoản tiền lên tới 7.000USD để sử dụng dịch vụ làm đẹp đặc biệt này. Thú chơi thể thao chỉ có ở Dubai Những sân golf hay sân tennis nằm lưng chừng trời chuyên phục vụ cho những doanh nhân giàu có nằm trên nóc khách sạn Burj Al Arab ở độ cao 300m. Nghĩa địa siêu xe Jaguar, Audi, BMW, Ferrari Enzo, Porsche... hàng triệu chiếc xe hàng hiệu như thế đang nằm phủ bụi chờ người đến mua với giá rất rẻ. Đây từng là đồ chơi của những triệu phú, chúng bị bỏ rơi khi chủ nhân phá sản và chạy trốn, do Dubai có luật về nợ rất nghiêm khắc. Cảnh sát thu lại hàng nghìn chiếc xe như thế này và bán lại với giá siêu rẻ. Một chiếc xe bám đầy bụi nằm tại "nghĩa địa siêu xe". Cảnh tắc đường ở Dubai. Những mẫu xe độc nhất vô nhị. Xe cảnh sát siêu sang Cảnh sát Dubai được trang bị một dàn xe siêu sang gồm Aston Martin, Bentley, Ferrari và Lamborghini. Dàn siêu xe đáng mơ ước của cảnh sát Dubai. Máy ATM bán vàng miếng Những chiếc máy ATM bán vàng miếng này là minh chứng rõ nhất cho sự giàu có và xa hoa của tiểu quốc Dubai. Đến với xứ sở của những thứ xa xỉ tới mức điên rồ này, chắc chắn ai cũng sẽ bị choáng ngợp bởi những khung cảnh tuyệt vời khó diễn tả bằng lời. Danh Tuyên Từ khóa: điên rồ khủng khiếp giàu có xa xỉ xa hoa dubai tiểu vương quốc ả rập thống nhất đất nước giàu có Bình luận * Vui lòng nhập bình luận tiếng Việt có dấu Nhập lại Gửi

Set-Cookie: .ASPXANONYMOUS=qZGU3ITf9UpOvd7AXNNW6PyMZhu00Bf8r291GZ5e19AvLngXw7mSNg5eZtUR_tJNCT-X4QVO5YwIl48scp3PR97Ii1bs6QwCPhiKbBo0GVnXRSga5aXoenado4rJoBx90SGHVjyWKZ8oQJ1wH3-50A2; domain=ngaynay.epi.vn; expires=Mon, 31-Jul-2017 23:25:23 GMT; path=/; HttpOnly

X-Cache: MISS from cache13


markdown:
Bé Luna và các nhóc tỳ thể hiện phong cách sành điệu không kém cạnh các fashionista nhí.
|
|![]()
|
|
Váy hạ eo đường cắt may tỉ mỉ, giày búp bê nhỏ xinh trang trí cánh hoa điệu đà là trang phục được chọn cho bé Luna khi tham dự tuần lễ thời trang cho trẻ em.
|
|![]()
|
|![]()
|
|
Lần đầu tiên được tham gia một sự kiện với sự góp mặt của rất nhiều bạn bè đồng trang lứa, Luna thể hiện sự hào hứng khi được tập luyện catwalk, vui chơi và chụp ảnh street style cùng các bạn.
|
|![]()
|
|![]()
|
|
Không chỉ thể hiện sự chuyên nghiệp khi xuất hiện trên sàn diễn, các nhóc tỳ còn bộc lộ sự tự tin và cá tính riêng qua cách ăn mặc, tạo dáng.
|
|![]()
|
|![]()
|
|
Bên cạnh những bộ cánh rực rỡ sắc màu, nhiều phụ huynh còn chọn trang phá cách như váy suông, tất lưới, bốt, vòng choker cho các bé chưng diện.
|
|![]()
|
|![]()
|
|
Các mẫu quần áo kiểu dáng đơn giản và giúp các bé thoải mái chạy nhảy, nô đùa vẫn là trang phục được các mẫu nhí yêu thích nhất.
|
|![]()
|
|![]()
|
|
Hot trend jean rách, giầy sneaker cũng được đưa vào dòng thời trang trẻ em.
|
|![]()
|
|![]()
|
|
Với mong muốn giúp các nhóc tỳ nhà mình được tiếp xúc với thời trang và xây dựng phong cách từ bé, nhiều bậc phụ huynh đã không ngừng đầu tư trang phục và phụ kiện cho các em.
Dựa trên quan điểm lấy độc giả làm trung tâm, chúng tôi mong rằng sẽ nhận được những góp ý và mong muốn của bạn về 2 tiêu chí:Thiết kế giao diện Trải nghiệm đọc tin

X-Content-Type-Options: nosniff

Cache-Control: max-age=120, stale-while-revalidate=6, stale-if-error=864000, private

Set-Cookie: device_env=4; expires=Tue, 30-May-2017 12:45:40 GMT; path=/; domain=ngoisao.net

X-XSS-Protection: 1; mode=block


markdown:
20/12/2013 10:58
Bị cáo Trần Thiên Luân.
Đây là vụ án có tính chất đặc biệt nghiêm trọng, vì hành vi của Luân, Phong và Khương hung hăng, côn đồ rất nguy hiểm cho xã hội, việc bị hại không chết là ngoài ý muốn của chúng. Bản thân Luân có một tiền án về tội “Trộm cắp tài sản” nên cần xử lý nghiêm. HĐXX tuyên phạt Trần Thiên Luân 13 năm tù tội “Giết người”. Vợ Luân nghe tuyên án, nước mắt đầm đìa rồi ngã quỵ xuống ghế...
Bị hại Nguyễn Văn Khởi bị đồng bọn của Luân chém tổng cộng 5 vết thương tỷ lệ 29% và Phạm Thành Nhân 4 vết, tỷ lệ thương tật 11%. 2 bị hại cho biết, vết thương tuy lành nhưng vận động, đi lại khó khăn hay bị đau nhức bên trong. Bị hại cũng yêu cầu Luân phải bồi thường tiền thuốc điều trị, tiền mất thu nhập, tổn thất tinh thần… là 51 triệu đồng (số tròn).
Phụ trách: Trần Đoàn Trung - Phó Chủ tịch Liên đoàn Lao động TP.HCM
Phó Tổng Biên tập: Nguyễn Văn Tín
Phó Tổng Biên tập: Nguyễn Văn Trạch
Tổng Thư ký Tòa soạn: Dương Quang
Giấy phép số 1872/GP- BTTTT cấp ngày 9 tháng 10 năm 2012 của Bộ Thông tin và Truyền thông
Địa chỉ: 127 Võ Văn Tần, Phường 6, Quận 3 - TPHCM, Điện thoại: 84-8-3930.6262 / 3930.3270, Fax: 84-8-3930.4707, Email: toasoan@nld.com.vn
Bản quyền thuộc về Báo Người Lao Động ©2001-2014
Ghi rõ nguồn www.nld.com.vn khi sử dụng lại thông tin từ website này
Hotline: 0926 864 344
Email: doanhnghiep@admicro.vn


markdown:
13/12/2013 16:26
Phụ trách: Trần Đoàn Trung - Phó Chủ tịch Liên đoàn Lao động TP.HCM
Phó Tổng Biên tập: Nguyễn Văn Tín
Phó Tổng Biên tập: Nguyễn Văn Trạch
Tổng Thư ký Tòa soạn: Dương Quang
Giấy phép số 1872/GP- BTTTT cấp ngày 9 tháng 10 năm 2012 của Bộ Thông tin và Truyền thông
Địa chỉ: 127 Võ Văn Tần, Phường 6, Quận 3 - TPHCM, Điện thoại: 84-8-3930.6262 / 3930.3270, Fax: 84-8-3930.4707, Email: toasoan@nld.com.vn
Bản quyền thuộc về Báo Người Lao Động ©2001-2014
Ghi rõ nguồn www.nld.com.vn khi sử dụng lại thông tin từ website này
Hotline: 0926 864 344
Email: doanhnghiep@admicro.vn


markdown:
##
[Muốn bán 0974969606 giá 600000 ](http://nn.so09.net/2017/04/muon-ban-0974969606-gia-600000.html)
Kiếm số đẹp vip là nhu cầu của đại đa số người sử dụng điện thoại di động, Nó sẽ phục vụ tốt cho công việc kinh doanh, quan hệ bạn bè, xã hội hàng ngày. Người kinh doanh có sim số đẹp sẽ có được nhiều lợi thế hơn so với đối thủ, nếu quý khách đang muốn mua
0943334866 …………….giá bán……………. 1200000
0986343440 …………….giá bán……………. 600000
0963155722 …………….giá bán……………. 600000
0972868617 …………….giá bán……………. 1500000
0932820068 …………….giá bán……………. 500000
0961344858 …………….giá bán……………. 600000
0963394349 …………….giá bán……………. 1500000
0976227388 …………….giá bán……………. 1500000
0943231100 …………….giá bán……………. 1000000
0964193186 …………….giá bán……………. 600000
0964468979 …………….giá bán……………. 3000000
0933020803 …………….giá bán……………. 1200000
0972424660 …………….giá bán……………. 1000000
0928512579 …………….giá bán……………. 500000
0945054088 …………….giá bán……………. 1200000
0924032368 …………….giá bán……………. 500000
0933472012 …………….giá bán……………. 1200000
0933339700 …………….giá bán……………. 1500000
0962230175 …………….giá bán……………. 1200000
0927667337 …………….giá bán……………. 1000000
Mời xem :
ĐT: 0912.855.663- 0835899999- 0903966896-0905188999 - ĐC: 105-107 Đường Số 11, Phường 11, Quận Gò Vấp, TPHCM
0943060446 …………….giá bán……………. 400000
0932699544 …………….giá bán……………. 400000
0926089379 …………….giá bán……………. 500000
0932641345 …………….giá bán……………. 400000
0938555946 …………….giá bán……………. 500000
0987929443 …………….giá bán……………. 400000
0966272434 …………….giá bán……………. 500000
0938363505 …………….giá bán……………. 500000
0985735036 …………….giá bán……………. 500000
0963529378 …………….giá bán……………. 400000
0977327011 …………….giá bán……………. 400000
0963573787 …………….giá bán……………. 400000
0925160592 …………….giá bán……………. 400000
0964411565 …………….giá bán……………. 500000
0932008242 …………….giá bán……………. 400000
0966412282 …………….giá bán……………. 400000
0938828474 …………….giá bán……………. 350000
0919834778 …………….giá bán……………. 500000
0963187220 …………….giá bán……………. 400000
0962727917 …………….giá bán……………. 400000
Tiếp tục xem nữa :
ĐT: 0912.855.663- 0835899999- 0903966896-0905188999 - ĐC: 105-107 Đường Số 11, Phường 11, Quận Gò Vấp, TPHCM
0932104572 …………….giá bán……………. 300000
0906605843 …………….giá bán……………. 300000
0945116671 …………….giá bán……………. 350000
0906380682 …………….giá bán……………. 300000
0979695723 …………….giá bán……………. 300000
0977157305 …………….giá bán……………. 300000
0902570453 …………….giá bán……………. 300000
0977790463 …………….giá bán……………. 300000
0924392422 …………….giá bán……………. 300000
0938865132 …………….giá bán……………. 300000
0967824271 …………….giá bán……………. 300000
0938865434 …………….giá bán……………. 300000
0902486251 …………….giá bán……………. 300000
0902430374 …………….giá bán……………. 300000
0903951035 …………….giá bán……………. 300000
0977230421 …………….giá bán……………. 300000
0977701452 …………….giá bán……………. 300000
0909403221 …………….giá bán……………. 350000
0938749213 …………….giá bán……………. 300000
0938436965 …………….giá bán……………. 300000
[5Bán sim năm sinh 1991 tại TPHCM](http://www.webproclicks.com/ban-sim-nam-sinh-1991-tai-tphcm.html)để phục vụ mục đích nào đó hãy nhanh tay chọn cho mình một sim đẹp giá rẻ như ý. Dưới đây là một ít sim số đẹp giá rẻ để các bạn lựa chọn.
0943334866 …………….giá bán……………. 1200000
0986343440 …………….giá bán……………. 600000
0963155722 …………….giá bán……………. 600000
0972868617 …………….giá bán……………. 1500000
0932820068 …………….giá bán……………. 500000
0961344858 …………….giá bán……………. 600000
0963394349 …………….giá bán……………. 1500000
0976227388 …………….giá bán……………. 1500000
0943231100 …………….giá bán……………. 1000000
0964193186 …………….giá bán……………. 600000
0964468979 …………….giá bán……………. 3000000
0933020803 …………….giá bán……………. 1200000
0972424660 …………….giá bán……………. 1000000
0928512579 …………….giá bán……………. 500000
0945054088 …………….giá bán……………. 1200000
0924032368 …………….giá bán……………. 500000
0933472012 …………….giá bán……………. 1200000
0933339700 …………….giá bán……………. 1500000
0962230175 …………….giá bán……………. 1200000
0927667337 …………….giá bán……………. 1000000
Mời xem :
[http://4.so09.net/](http://4.so09.net/)
ĐT: 0912.855.663- 0835899999- 0903966896-0905188999 - ĐC: 105-107 Đường Số 11, Phường 11, Quận Gò Vấp, TPHCM
0943060446 …………….giá bán……………. 400000
0932699544 …………….giá bán……………. 400000
0926089379 …………….giá bán……………. 500000
0932641345 …………….giá bán……………. 400000
0938555946 …………….giá bán……………. 500000
0987929443 …………….giá bán……………. 400000
0966272434 …………….giá bán……………. 500000
0938363505 …………….giá bán……………. 500000
0985735036 …………….giá bán……………. 500000
0963529378 …………….giá bán……………. 400000
0977327011 …………….giá bán……………. 400000
0963573787 …………….giá bán……………. 400000
0925160592 …………….giá bán……………. 400000
0964411565 …………….giá bán……………. 500000
0932008242 …………….giá bán……………. 400000
0966412282 …………….giá bán……………. 400000
0938828474 …………….giá bán……………. 350000
0919834778 …………….giá bán……………. 500000
0963187220 …………….giá bán……………. 400000
0962727917 …………….giá bán……………. 400000
Tiếp tục xem nữa :
[http://bansimthantai.simsothantai.net/](http://bansimthantai.simsothantai.net/)
ĐT: 0912.855.663- 0835899999- 0903966896-0905188999 - ĐC: 105-107 Đường Số 11, Phường 11, Quận Gò Vấp, TPHCM
0932104572 …………….giá bán……………. 300000
0906605843 …………….giá bán……………. 300000
0945116671 …………….giá bán……………. 350000
0906380682 …………….giá bán……………. 300000
0979695723 …………….giá bán……………. 300000
0977157305 …………….giá bán……………. 300000
0902570453 …………….giá bán……………. 300000
0977790463 …………….giá bán……………. 300000
0924392422 …………….giá bán……………. 300000
0938865132 …………….giá bán……………. 300000
0967824271 …………….giá bán……………. 300000
0938865434 …………….giá bán……………. 300000
0902486251 …………….giá bán……………. 300000
0902430374 …………….giá bán……………. 300000
0903951035 …………….giá bán……………. 300000
0977230421 …………….giá bán……………. 300000
0977701452 …………….giá bán……………. 300000
0909403221 …………….giá bán……………. 350000
0938749213 …………….giá bán……………. 300000
0938436965 …………….giá bán……………. 300000
## 0 nhận xét:
## Đăng nhận xét

Server: GSE


markdown:
[Trang chủ](http://nobita.vn) [Sách kinh tế](/danh-muc/1/sach-kinh-te.html) [Marketing - Bán hàng](/danh-muc/16/marketing-ban-hang.html)
- PR - Lý Luận Và Ứng Dụng (Tái Bản 2014)
# PR - Lý Luận Và Ứng Dụng (Tái Bản 2014)
[TS. Đinh Thị Thúy Hằng](/thuong-hieu/457/ts-dinh-thi-thuy-hang.html)Phát hành: [Alphabooks](/thuong-hieu/33/alphabooks.html)
Bọc Plastic miễn phí
Giao hàng miễn phí trong nội thành TP. HCM với đơn hàng
**≥ 150.000 đ**
Giao hàng miễn phí toàn quốc với đơn hàng
**≥ 250.000 đ** ![ PR - Lý Luận Và Ứng Dụng (Tái Bản 2014)](/stores/uploads/a/pr-ly-luan-va-ung-dung-2014__63475.jpg)
### Giới thiệu sách
**PR - Lý Luận Và Ứng Dụng (Tái Bản 2014)**
PR, ứng dụng của lý thuyết truyền thông, là nghệ thuật thuyết phục công chúng đặc biệt quan trọng trong việc tạo lập các mối quan hệ lâu dài và có lợi, xây dựng và duy trì hình ảnh, thương hiệu, uy tín cho một tổ chức, bất kể tổ chức đó là một doanh nghiệp, một tập đoàn, một tổ chức phi chính phủ hay một chính phủ.
**PR - Lý luận & Ứng dụng**, từ những định nghĩa mang tính tổng quan nhất và có cơ sở học thuật đến những tình huống thực tiễn sinh động, cung cấp một công cụ tác nghiệp căn bản và hữu dụng cho một nhà họat động PR.
Bao quát toàn bộ các ứng dụng của PR, cuốn sách vẽ ra bản sơ đồ chiến lược giúp nhà hoạt động PR phân tích, nắm bắt và giải quyết các vấn đề cốt lõi của lĩnh vực này, như các kỹ năng tác nghiệp cụ thể, các chiến lược quản lý khủng hoảng, quá trình và phương pháp xây dựng các mối quan hệ với công chúng, các vấn đề pháp luật có liên quan...
### Thông tin chi tiết
|
|[TS. Đinh Thị Thúy Hằng](/thuong-hieu/457/ts-dinh-thi-thuy-hang.html) [Phát hành](/products/groupfield/2/phat-hanh.html) [Alphabooks](/thuong-hieu/33/alphabooks.html) [NXB](/products/groupfield/4/nxb.html) [Marketing - Bán hàng](/danh-muc/16/marketing-ban-hang.html)
### Gửi nhật xét của bạn
[đăng nhập](/users/login/index.html?redirect=%2F658%2Fpr-ly-luan-va-ung-dung.html)để viết nhận xét

Server: Apache

Set-Cookie: SITE_VISITOR=1; expires=Wed, 24-May-2017 12:38:09 GMT; path=/; domain=.nobita.vn


markdown:
![ Chú Đức - Time city](/uploads/.thumbs/images/ban-ghe-an-dep-245-.jpg)
**CÔNG TY CỔ PHẦN PHÁT TRIỂN NỘI THẤT TOÀN CẦU**
Địa chỉ: Số 5 lô 2B đường Trung Hòa, Cầu Giấy, Hà Nội
Địa chỉ 2: 665 Lê Văn Tách, P.An Bình, Dĩ An, Bình Dương
Tel: 0462.922.688 - Hotline: 0948.977.688
****
[Bán hàng mẫu giảm giá 50%](http://noithattoancau.vn/thanh-ly-thang-3-noi-that-gia-dinh-dep-chat-luong-tot-nhat-tai-ha-noi.html) ****
|
|TỦ BẾP GỖ TỰ NHIÊN |
|ĐƠN GIÁ TỦ BẾP TÍNH THEO MÉT DÀI TỦ (MÉT KÉP CẢ TRÊN+DƯỚI)
|
|TỦ BẾP TẦN BÌ |
|TỦ BẾP SỒI MỸ |
|TỦ BẾP XOAN ĐÀO |
|TỦ BẾP GỖ GỤ |
|TỦ BẾP GỖ ÓC CHÓ |
|TỦ BẾP GỖ HƯƠNG
|7,500,000||8,250,000||9,000,000||12,000,000||16,500,000||18,000,000|
|
|TỦ BẾP GỖ CÔNG NGHIỆP |
|ĐƠN GIÁ 1 CÁI KÍCH THƯỚC 1100x700x400
|
|TỦ BẾP
MDF SƠN BỆT
|
|TỦ BẾP
VENEER
|
|TỦ BẾP
MELAMINE
|
|TỦ BẾP LAMINATE |
| TỦ BẾP
ACRYLIC
|
|ACRYLIC KHÔNG ĐƯỜNG LINE
|6,000,000||6,600,000||7,500,000||9,000,000||9,600,000||13,200,000|
|
|QUY CÁCH SẢN PHẨM TỦ BẾP:
*Đơn giá trên được tính theo mét dài kép tủ bếp (cả tủ trên dưới) kích thước tủ đúng tiêu chuẩn. Đối với các thiết kế tủ đơn( chỉ có tủ trên hoặc dưới) hay các vị trí có thiết kế đặc biệt như khoang tủ lạnh, khoang hút mùi... sẽ có giá riêng tùy theo thiết kế
*Đơn giá trên chưa bao gồm đá, kính, phụ kiện hãng
*Toàn bộ hậu tủ, đáy ngăn kéo chất liệu alumiun chịu nước, Chân nhựa tăng chỉnh chiều cao cho tủ dưới,
*Đối với mẫu tủ gỗ công nghiệp, chúng tôi sử dụng cốt MDF, MFC 100% lõi xanh chống ẩm của An Cường cung cấp. Mã màu của sản phẩm theo chỉ định của khách hàng dựa trên mã màu của nhà cung cấp.
*Phụ kiện như bản lề, ray ngăn kéo, tay mắn được sử dụng đi kèm cho tủ bếp là loại phụ kiện thường. Quý khách hàng có nhu cầu có thể đổi sang dùng phụ kiện hãng, chi tiết liên hệ với nhân viên tư vấn của cty.
*Các mẫu tủ bếp là mẫu Toàn Cầu đã thiết kế của công trình trước, khách hàng có nhu cầu sản xuất tủ bếp, công ty Toàn Cầu sẽ có kiến trúc sư đến khảo sát và tư vấn thiết kế miễn phí cho từng không gian và yêu cầu riêng biệt.
*Thời gian sản xuất và thi công lắp đặt từ 12- 15 ngày đặt hàng tùy theo khối lượng sản phẩm và thời điểm sản xuất.
*Chúng tôi giao hàng và vận chuyển, lắp đặt hoàn thiện sản phẩm tại Hà Nội Và Tp. HCM, Đối với các tỉnh, TP khác quý khách sẽ chịu phí vận chuyển theo giá hiện hành và các chi phí ăn ở phát sinh của thợ trong quá trình lắp đặt.
*Tất cả sản phẩm sẽ được nội thất Toàn Cầu bảo hành 3 năm, bảo trì vĩnh viễn
**GIỚI THIỆU TỦ BẾP GỖ TỰ NHIÊN - TC744**
Do chất lượng cuộc sống ngày càng hiện đại hơn, việc đầu tư cho nhu cầu sinh hoạt ngày càng được chú trọng hơn. Việc sắm sửa cho căn bếp nhà mình một mẫu bếp đẹp hiện đại và bộ bàn ăn gỗ công nghiệp cao cấp không còn quá xa lạ nữa. Hãy đến với
[công ty toàn cầu](http://noithattoancau.vn/) của chúng tôi ngay hôm nay để có thể nhanh tay sở hữu những mẫu nội thất đẹp này về với không gian căn bếp nhà mình nhé! [Mẫu bếp đẹp hiện đại](http://noithattoancau.vn/tu-bep-dep.html) được xem là điểm nhấn chính của căn bếp hiện đại. Mẫu tủ bếp được thiết kế theo dáng chữ L thiết kế gọn gàng, đơn giản nhưng đầy đủ tiện nghi và đảm bảo tính thẩm mỹ cao. Chiếc kệ được thiết kế gồm 2 tầng và phần ốp tường ở giữa 2 tầng với gam màu xanh lá cây rất nổi bật. Chiếc tủ với tầng kệ được làm từ chất liệu gỗ công nghiệp MDF cao cấp có ưu điểm chống được mối mọt và cong vênh tốt nhất và có độ chống nước tốt nhất so với các loại gỗ khác. Cánh tủ làm bằng kính cường lực tốt, chống xước và dễ dàng vệ sinh. Mặt kệ còn được ốp đã cao cấp màu trắng thời thượng nổi bật trên nền gỗ vàng cánh gián. Các tay nắm cánh tủ hay bản lề cùng bồn rửa đều được làm từ loại inox cao cấp, không lo bị han gỉ.
Tiếp đến trong không gian căn bếp hiện đại là vị trí của một bộ
[bàn ăn gỗ công nghiệp](http://noithattoancau.vn/ban-ghe-an.html). Thiết kế nhẹ nhàng và tinh tế cùng chất liệu với bộ tử bếp tạo không gian căn bếp hoàn hảo hơn nhiều. Mặt bàn sơn trắng - là loại sơn cao cấp nhập khẩu từ hoa kỳ nên nước sơn bóng mịn và không bị phai màu theo thời gian dưới mọi tác động. Bộ ghế bàn ăn này được thiết kế kiểu không tựa, chân cao và đồng thời còn được bọc đệm nỉ màu đỏ tươi nổi bật giúp mọi người trong gia đình được thư giãn thoải mái nhất.
Cơ sở 1: Số 5 Phố Trung Hòa - Cầu Giấy - Hà Nội
( Ngã tư Trung Hòa & Vũ Phạm Hàm )
Tel: 0462.922.688 - Hotline: 0939 977 688
Email:
[[email protected]](/cdn-cgi/l/email-protection)
Cơ sở 2: 665 Lê Văn Tách, P.An Bình, Dĩ An, Bình Dương
Hotline: 0948 977 688
Email:
[[email protected]](/cdn-cgi/l/email-protection)
Cơ sở 1: Số 5 Phố Trung Hòa - Cầu Giấy - Hà Nội
( Ngã tư Trung Hòa & Vũ Phạm Hàm )
Tel: 0462.922.688 - Hotline: 0939 977 688
Email:
[[email protected]](/cdn-cgi/l/email-protection)
Cơ sở 2: 665 Lê Văn Tách, P.An Bình, Dĩ An, Bình Dương
Hotline: 0948 977 688
Email:
[[email protected]](/cdn-cgi/l/email-protection)
## Bình luận sản phẩm

Server: cloudflare-nginx

Set-Cookie: arrproducts=%5B312%5D; expires=Wed, 24-May-2017 12:40:59 GMT; path=/


markdown:
Hãy
[Đăng nhập](javascript:;) [Sửa thông tin](javascript:;)hoặc [Đăng ký](javascript:;)
Bạn nào yêu cầu truyện tranh gì thì liên hệ
[ad.ntruyen@gmail.com](mailto:ad.ntruyen@gmail.com), Mình sẽ tìm giúp cho. Toàn bộ truyện của [Han Yu-rang](http://ntruyen.info/tac-gia/Han-Yu-rang), [Hwang Mi Ri](http://ntruyen.info/tac-gia/Hwang-Mi-Ri)
Thể loại truyện đang hot là:
,
[,](http://ntruyen.info/danh-sach-truyen/Manhua)
### Manhua
[,](http://ntruyen.info/danh-sach-truyen/Xuyen-Khong)
### Xuyên không
[,](http://ntruyen.info/danh-sach-truyen/Romance)
### Lãng mạn
,
[Truyện Tranh Full Bộ](http://ntruyen.info/danh-sach-truyen?ViewType=1&CurrentStatus=3) [Truyện Sim](http://ntruyen.info/tim-kiem?SearchBy=1&SearchText=Truy%E1%BB%87n+Sims)
Truyện hot nhất:
[Conan](http://ntruyen.info/truyen/conan), [Đấu La Đại Lục](http://ntruyen.info/truyen/Dau-La-Dai-Luc), [Bleach](http://ntruyen.info/truyen/Su-Gia-Than-Chet), [Hiệp Khách Giang Hồ](http://ntruyen.info/truyen/Hiep-Khach-Giang-Ho), [Lớp Trưởng Đại Nhân](http://ntruyen.info/truyen/Lop-Truong-Dai-Nhan), [Tầm Trảo Tiền Thế Chi Lữ](http://ntruyen.info/truyen/Tam-Trao-Tien-The-Chi-Lu), [Kỵ Sĩ Hoang Tưởng Dạ](http://ntruyen.info/truyen/Ky-Si-Hoang-Tuong-Da), [Hoa Thiên Cốt](http://ntruyen.info/truyen/Hoa-Thien-Cot)
Thông báo đã có:
|
|![]()
# Yaotsukumo(Vừa cập nhật: 13/07/2013 10:12)
|
|Tác giả:
Nguồn: Đang cập nhật Tình trang:
## Full Bộ
|
|**Đánh giá:**8/10 trong tổng số 5 phiếu bầu. **Sơ lượt:**Tachibana Tsukumo là một cô gái không thể cảm nhận được nỗi đau. Yao...một kẻ bất tử luôn mong muốn một cái chết. Chuyện của họ sẽ đi về đâu?
Truyện này chứa nội dung không phù hợp với trẻ em.
Nếu bạn trên 18 tuổi và có thể tự chịu trách nhiệm khi xem nội dung bên dưới thì hãy
Nếu bạn trên 18 tuổi và có thể tự chịu trách nhiệm khi xem nội dung bên dưới thì hãy
[click vào đây](javascript:void(0))để xem tiếp
STT
Chương truyện
Lượt xem
Người đăng
Cập nhật
0
299
13/07/2013
0
243
14/06/2013
0
229
15/05/2013
0
260
13/05/2013
0
256
01/05/2013
0
281
30/04/2013
0
333
29/04/2013
0
387
29/04/2013
0
532
28/04/2013
0
813
28/04/2013
Bình luận
|1|![ Yaotsukumo](http://3.bp.blogspot.com/-Jod8-DpYyIY/VcbRU8MuI5I/AAAAAAAFquo/1dMqRZLp5Nc/Yaotsukumo.jpg?imgmax=500)
Thể loại


markdown: Ra mắt vào khoảng đầu năm 2016 nhưng Samsung Galaxy vẫn được đánh giá là một trong những smartphone thành công nhất của thương hiệu Samsung. Nếu bạn đang sở hữu siêu phẩm này hãy đọc ngay những điều sau đây để việc sử dụng trở nên dễ dàng và hiệu quả hơn nhé. 1. Vô hiệu hóa các ứng dụng và dịch vụ tích hợp Với sản phẩm Galaxy S6, ông lớn Samsung đã giảm một phần các ứng dụng và dịch vụ tiện ích bên trong nhưng vẫn có một vài ứng dụng khách hàng không dùng đến, bạn có thể vô hiệu hóa chúng để đưa những ứng dụng này vào chế độ chạy nền hoặc hiểu thị trong khay ứng dụng. Dịch vụ tham khảo: Khuyến mãi đặc biệt khi thay màn hình samsung s6 chính hãng tại Thuận Phát Mobile. Cách thực hiện như sau: - Cách 1: Mở khay ứng dụng và nhấn vào Edit, chạm vào dấu trừ tại các ứng dụng muốn gỡ bỏ. Trong trường hợp không thể gỡ bỏ hoàn toàn khỏi thiết bị, hệ thống sẽ tự động đưa những ứng dụng này vào chế độ vô hiệu hóa. - Cách 2: Vào Cài đặt -> Applications -> Application manager. Màn hình sẽ hiểu thị tất cả những ứng dụng có trên thiết bị, để gỡ bỏ hoặc vô hiệu hóa, bạn chỉ cần chạm vào chúng và lựa chọn thông tin tương ứng. 2. Thiết lập dấu vân tay xác nhận cho thiết bị điện thoại: Giống như những sản phẩm trước, dấu vân tay cảm biến thường được những kỹ sư của Samsung tích hợp đầy đủ vào nút Home trên thiết bị tuy nhiên đã được cải tiến hiện đại hơn rất nhiều. Đơn giản hơn, quá trình thiết lập chỉ mất một vài phút để hoàn thành. Có thể bạn quan tâm: Ưu đãi khi thay màn hình samsung note 4 zin ngay hôm nay. Thêm dấu vân tay cảm biến bằng cách: Vào trình thiết lập của hệ thống -> Lock screen and security > Fingerprints. Samsung Galaxy S6 cho phép thêm tối đa 4 bản in dấu vân tay bằng cách chạm vào bộ phận cảm biến lặp lại nhiều lần. Đặc biệt, khi thiết lập dấu vân tay, bạn nên nghiêng ra mọi góc độ của bộ cảm biến, hệ thống sẽ nhận dấu vân một cách dễ dàng và chính xác hơn. 3. Kích hoạt Download Booster: Giống như người anh em Samsung Galaxy S5, Samsung S6 cũng được hỗ trợ tính năng Download Booster. Tuy nhiên tính năng này hoàn toàn không được mở sẵn mà bạn phải kích hoạt để sử dụng chúng. Cách kích hoạt: Vào Thiết lập hệ thống chính -> Moreconnection settings -> Download Booster. Sau khi đã kích hoạt, ứng dụng này sẽ kết hợp với đường truyền mạng để tải về các tập tin với tốc độ nhanh hơn rất nhiều. 4. Kích hoạt chức năng Smartlock: Trong trường hợp chiếc điện thoại Samsung S6 đã được thiết lập dấu vân tay, đừng chủ quan mà hãy cài đặt thêm tính năng khóa màn hình để tăng tính bảo mật hơn. Galaxy S6 hỗ trợ tính năng Smart Lock có trong Lollipop, cho phép bạn truy cập vào màn hình và menu Lock screen and security, một mức độ sâu hơn trong các thiết lập Security lock. 5. Sử dụng chế độ tiết kiệm pin: Ứng dụng Ultra Power Saving Mode có trên sản phẩm Galaxy S6 sẽ giúp pin trên điện thoại có thời lượng sử dụng dài hơn bình thường. Trong trường hợp thiết bị của bạn sắp cạn kiệt pin và bật chế độ này, ứng dụng sẽ đưa màn hình của điện thoại về giao diện trắng đen và vô hiệu hóa phần lớn các ứng dụng. Tuy bạn không thể sử dụng được tất cả những chức năng nhưng những nhu cầu chính như nhận cuộc gọi, tin nhắn vẫn được đảm bảo như bình thường. Bạn có thể truy cập vào chế độ này bằng cách vào Settings > Battery > Power saving mode. Từ những cách sử dụng đơn giản như trên, chúng tôi mong rằng bạn sẽ sử dụng chiếc điện thoại Samsung Galaxy S6 của mình hiệu quả hơn. Nếu quý khách hàng gặp vấn đề gì liên quan đến điện thoại hoặc cần thay màn hình điện thoại, vui lòng liên hệ với Thuận Phát Mobile để được tư vấn và hỗ trợ nhanh nhất. Công ty TNHH Thương Mại Và Sửa Chữa Điện Thoại Di Động Thuận Phát Địa chỉ: 514 Lê Hồng Phong, Phường 1, Quận 10, TP.HCM Hotline: 093 797 0101 - 093 697 0101


markdown:
-
Hãy ủng hộ PhienBanMoi.Com bằng cách LIKE trang FANPAGE , GOOGLE+ dưới mỗi bài viết hoặc chia sẻ website nếu thấy hữu ích. Trân trọng cảm ơn!
-
[[Thông Báo] Thông Báo Tuyển mod cho toàn diễn đàn](http://phienbanmoi.com/threads/tuyen-mod-cho-toan-dien-dan.15563/)
Forum mới lập rất cần sự giúp đỡ của các bạn vậy nên bạn nào có khả năng thì đăng kí tham gia làm mod để quản lí, phát triển diễn đàn nhé!
# cần giúp đỡ chuyển legacy sang uefi Hp8470p
Thảo luận trong '
[Hỏi Đáp, Thắc Mắc, Yêu Cầu](diendan/hoi-dap-thac-mac-yeu-cau.74/)' bắt đầu bởi [likeyou_usa](members/likeyou_usa.201717/), [29 Tháng mười một 2014](threads/can-giup-do-chuyen-legacy-sang-uefi-hp8470p.46522/).

Server: LiteSpeed

Accept-Ranges: bytes


markdown:
![ Người đứng đầu cơ quan chống doping Nga từ chức](http://image.plo.vn/w653/Uploaded/thanhtam/2015_11_11/6-0_RRIO.jpg)
(PLO)- Sau hàng loạt VĐV Nga dính doping, người đứng đầu phòng thí nghiệm chống doping của Nga (RUSADA) Grigory Rodchenkov đã từ chức.
Ngày 11-11, một cố vấn của Bộ Thể thao Nga đã thông báo cho báo chí là người đứng đầu phòng thí nghiệm chống doping của Nga (RUSADA) Grigory Rodchenkov đã từ chức.
* Bộ trưởng Thể thao Nga Vitaly Mutko đang đau đầu về vụ này.*
Theo Cơ quan chống doiping thế giới (WADA), Rodchenkov là nhân vật trung tâm của hàng loạt VĐV Nga dùng chất kích thích bất hợp pháp, trong đó có cả những loại chất có thể vô hiệu hóa các mẫu thử doping dương tính.
Rodchenko từ chức giũa lúc WADA và IAAF phê phán dữ dội phòng thí nghiệm chống doping của Nga. Rodchenko từ chức một ngày sau khi bản báo cáo dày 335 trang về các vụ tai tiếng sử dụng chất kích thích được công bố.
Bộ trưởng Thể thao Nga Mutko (cũng là Chủ tịch LĐBĐ Nga) đã chấp nhận việc từ chức của người đứng đầu phòng thí nghiệm chống doping này. Đồng thời chuyên gia phòng thí nghiệm là bà Maria Dikunet được chỉ định tạm thời ngồi vào ghế của Rodchenko
Ở một diễn tiến khác, Chủ tịch LĐĐK Quốc tế (IAAF) - ông Sebastian Coe đã cho Nga từ nay đến cuối tuần phải có những lời giải thích. Nếu không có những câu trả lời xác đáng thì nhiều khả năng IAAF sẽ cấm đoàn thể thao Nga tham dự Olympic Rio 2016.
Phía Nga, đứng đầu là Bộ trưởng Mutko đang tập hợp các tổ chức thể thao Nga để bàn về vấn đề này. Bản thân ông Mutko cũng cho rằng nếu Nga bị áp đặt lệnh trừng phạt không được tham dự Olympic 2016 là không được vì các thế hệ VĐV ngày nay họ chẳng dính dáng gì đến chuyện doping trong quá khứ.
**TẤN PHƯỚC**

Set-Cookie: .ASPXANONYMOUS=B3GL0YUD69Gd-ae-tpKms0SuvbAmgHnB0_Ein27IgxDqPikj7IPsVJigW1_YM955cxiT6hNQu5j89YPB__fy2GnjfpdlCresgbRBwY7O3jJP7j65v1wgcDkT_p_nExrbx-HTV-5WhR2UDms6UnlnLw2; domain=plo.vn; expires=Mon, 31-Jul-2017 23:48:58 GMT; path=/; HttpOnly


markdown:
Raovat.tuoitrevn.NET - Diễn đàn rao vặt hiệu quả - Đăng tin rao vặt miễn phí chất lượng, 5 năm uy tín toàn quốc
Nhằm bổ sung kiến thức và nâng cao năng lực cho các nhà quản lý, Công ty Cổ phần Giáo dục Việt Nam tổ chức chương trình đào tạo:
- Giúp học viên phát triển năng lực quản trị một cách chọn lọc va hệ thống nhằm quản lý hiệu quả các doanh nghiệp.
- Giúp học viên cập nhật những tư tưởng và thành tựu mới trong quản trị doanh nghiệp nhằm đạo tạo ra những đột phá mới cho doanh nghiệp và giúp doanh nghiệp thích ứng hiệu quả với những thay đổi nhanh chóng của môi trường kinh doanh.
Khoá học này được thiết kế phục vụ cho cácc nhà quản lý từ bậc trung đến cao ( Giám đốc , Phó giám đốc, trưởng phòng ) hoặc những người trong tương lai sẽ trở thành những nhà lãnh đạo công ty.
Nội dung của khoá học được thiết kế nhằm trang bị cho người học những kiến thức nâng cao :
- Về quản lý các hoạt động chức năng ( thông qua các chuyên đề quản trị marrketing, quản trị chuỗi cung ứng, quản trị nhân lực, và quản trị tài chính).
- Về phương pháp và kỹ năng xây dựng chiến lược phát triển công ty và chiến lược kinh doanh có tính cạnh tranh cao trên các lĩnh vực kinh doanh được lựa chọn ( thông qua chuyên đề quản lý chiến lược).
- Về kỹ năng và phương pháp nhằm kết hợp các hoạt động chức năng lại nhau nhằm hiện thực hoá chiến lược phát triển và chiến lược kinh doanh ( thông qua chuyên đề lập kế hoạch kinh doanh + bảo vệ án kinh doanh
- Phân biệt sự khác nhau giữa những vấn đề mang tính chiến lược và những vấn đề mang tính tác nghiệp
- Hiểu được qui trình xây dựng chiến lược
- Áp dụng một số mô hình để phân tích môi trường kinh doanh và tình hình nội bộ
- Đưa ra một số định hướng chiến lược cho đơn vị mình.
- Hiểu rõ bản chất Marketing hiện đại
- Nhận thức được sự đa dạng trong nhu cầu khách hàng
- Biết cách phân đoạn thị trường
- Nắm vững các công cụ Marrketing hỗn hợp
- Sự cần thiết cần phải thay đổi để tồn tại và phát triển trong môi trường kinh doanh ngày nay
- Xu hướng phát triển trong nền kinh tế hiện đại
- Một số mô hình quản lý sự thay đổi
- Các giai đoạn tâm lý của con người trong quá trình thay đổi
- Nguyên tắc quản lý sự thay đổi
- Vai trò của công tác quản lý nguồn nhân lực trong thực hiện kế hoạch kinh doanh của doanh nghiệp
- Các lựa chọn về chiến lược nguồn nhân lực
- Chiến lược kinh doanh và chiến lược nguồn nhân lực trong thực tế
- Các yếu tố của môi trường động viên khuyến khích nhân viên làm việc, đưa chiến lược kinh doanh vào hiện thực
- Tài chính & quản trị tài chính doanh nghiệp
- Báo cáo tài chính & ứng dụng báo cáo tài chính trong công việc điều hành quản lý.
- Đánh giá khái quát tình hình tài chính doanh nghiệp
- Phân tích hiệu quả kinh doanh
- Đàm phán và các loại đàm phán trong kinh doanh
- Các bước chuẩn bị cho quá trình đàm phán
- Chiến lược đàm phán hiệu quả
- Tính cách cá nhân và các phong cách đàm phán
- Thuyết trình hiệu quả và tầm quan trọng của nó trong quản lý
- Các bước chuẩn bị trước khi thuyết trình
- Cách gây ấn tượng và chú ý khi mở đầu bài thuyết trình
- Các kỹ năng trình bày và thể hiện nội dung bài thuyết trình
- Kỹ năng kết thúc bài thuyết trình
- Kỹ năng khuyến khích và trả lời câu hỏi của người nghe
---------------------------------------------------------
Quản trị kinh doanh,quản trị doanh nghiệp,học quản trị,cách quản lý,kỹ năng quản lý,
Khai giảng khóa học quản trị doanh nghiệp ngắn hạn
Chương trình: QUẢN TRỊ DOANH NGHIỆP”
****
Nhằm bổ sung kiến thức và nâng cao năng lực cho các nhà quản lý, Công ty Cổ phần Giáo dục Việt Nam tổ chức chương trình đào tạo:
**“Quản trị doanh nghiệp hiện đại ”.** **Mục Đích :**
- Giúp học viên phát triển năng lực quản trị một cách chọn lọc va hệ thống nhằm quản lý hiệu quả các doanh nghiệp.
- Giúp học viên cập nhật những tư tưởng và thành tựu mới trong quản trị doanh nghiệp nhằm đạo tạo ra những đột phá mới cho doanh nghiệp và giúp doanh nghiệp thích ứng hiệu quả với những thay đổi nhanh chóng của môi trường kinh doanh.
**Đối Tượng :**
Khoá học này được thiết kế phục vụ cho cácc nhà quản lý từ bậc trung đến cao ( Giám đốc , Phó giám đốc, trưởng phòng ) hoặc những người trong tương lai sẽ trở thành những nhà lãnh đạo công ty.
**Nội dung:**
Nội dung của khoá học được thiết kế nhằm trang bị cho người học những kiến thức nâng cao :
- Về quản lý các hoạt động chức năng ( thông qua các chuyên đề quản trị marrketing, quản trị chuỗi cung ứng, quản trị nhân lực, và quản trị tài chính).
- Về phương pháp và kỹ năng xây dựng chiến lược phát triển công ty và chiến lược kinh doanh có tính cạnh tranh cao trên các lĩnh vực kinh doanh được lựa chọn ( thông qua chuyên đề quản lý chiến lược).
- Về kỹ năng và phương pháp nhằm kết hợp các hoạt động chức năng lại nhau nhằm hiện thực hoá chiến lược phát triển và chiến lược kinh doanh ( thông qua chuyên đề lập kế hoạch kinh doanh + bảo vệ án kinh doanh
**1. Quản trị chiến lược**
- Phân biệt sự khác nhau giữa những vấn đề mang tính chiến lược và những vấn đề mang tính tác nghiệp
- Hiểu được qui trình xây dựng chiến lược
- Áp dụng một số mô hình để phân tích môi trường kinh doanh và tình hình nội bộ
- Đưa ra một số định hướng chiến lược cho đơn vị mình.
**2. Quản trị Marketing**
- Hiểu rõ bản chất Marketing hiện đại
- Nhận thức được sự đa dạng trong nhu cầu khách hàng
- Biết cách phân đoạn thị trường
- Nắm vững các công cụ Marrketing hỗn hợp
**3. Quản lý sự thay đổi**
- Sự cần thiết cần phải thay đổi để tồn tại và phát triển trong môi trường kinh doanh ngày nay
- Xu hướng phát triển trong nền kinh tế hiện đại
- Một số mô hình quản lý sự thay đổi
- Các giai đoạn tâm lý của con người trong quá trình thay đổi
- Nguyên tắc quản lý sự thay đổi
**4. Quản lý nguồn nhân lực**
- Vai trò của công tác quản lý nguồn nhân lực trong thực hiện kế hoạch kinh doanh của doanh nghiệp
- Các lựa chọn về chiến lược nguồn nhân lực
- Chiến lược kinh doanh và chiến lược nguồn nhân lực trong thực tế
- Các yếu tố của môi trường động viên khuyến khích nhân viên làm việc, đưa chiến lược kinh doanh vào hiện thực
**5. Quản trị tài chính**
- Tài chính & quản trị tài chính doanh nghiệp
- Báo cáo tài chính & ứng dụng báo cáo tài chính trong công việc điều hành quản lý.
- Đánh giá khái quát tình hình tài chính doanh nghiệp
- Phân tích hiệu quả kinh doanh
**6. Phát triển kỹ năng đàm phán**
- Đàm phán và các loại đàm phán trong kinh doanh
- Các bước chuẩn bị cho quá trình đàm phán
- Chiến lược đàm phán hiệu quả
- Tính cách cá nhân và các phong cách đàm phán
**7. Phát triển kỹ năng thuyết trình**
- Thuyết trình hiệu quả và tầm quan trọng của nó trong quản lý
- Các bước chuẩn bị trước khi thuyết trình
- Cách gây ấn tượng và chú ý khi mở đầu bài thuyết trình
- Các kỹ năng trình bày và thể hiện nội dung bài thuyết trình
- Kỹ năng kết thúc bài thuyết trình
- Kỹ năng khuyến khích và trả lời câu hỏi của người nghe
**Giảng viên:**là những giảng viên thực sự của đơn vị, là những người thầy xuất sắc trên cả hai phương diện lý thuyết và thực tiễn, giàu kinh nghiệm đào tạo thực tiễn. **Môi trường học tập**: Phòng học rộng rãi, thoáng mát, đảm bảo tiêu chí học tập và làm việc trong một môi trường chuyên nghiệp **Chứng chỉ cuối khoá:**Cuối khóa học, học viên tiến hành làm bài thi cuối kỳ để xếp loại trên **chứng chỉ “Bồi dưỡng Quản trị doanh nghiệp”** **của** __Cao đẳng Văn Lang__ **có giá trị vĩnh viễn trên toàn quốc.** *Hãy đến với chúng tôi để có một dịch vụ đào tạo với chất lượng tốt nhất!* **Địa chỉ học và đăng ký học vui lòng liên hệ:** **CÔNG TY CỔ PHẦN GIÁO DỤC VIỆT NAM** **TRUNG TÂM KẾ TOÁN QUỐC GIA** **Website:** __http://ketoanquocgia.net/static/dao-tao-quan-tri-doanh-nghiep/__ **Email:**minhnguyet.hcm@giaoducvietnam.edu.vn **Skype**: Daotaohcm **Mobile:** **08. 6678 7372 – 0983 86 86 21 ( Cô Nguyệt)**
---------------------------------------------------------
__Tại Tp Hồ Chí Minh:__ **** **Cơ sở 1:**Số 195 Đường D2, Phường 25, Quận Bình Thạnh, HCM **Cơ sở 2:**Số 8 Nguyễn Ngọc Lộc, Phường 14, Quận 10, HCM ( Ngã tư 3/2 - Ngô Quyền - Nguyễn Ngọc Lộc) __Tại Hà Nội:__ **Tầng 2, Tòa nhà** **451 Hoàng Quốc Việt – Cầu Giấy – Hà Nội (đối diện Đại học điện lực)** __Tại Đà Nẵng:__ **Số 4 Tiểu La - Phường Hòa Cường Bắc - Q. Hải Châu – TP Đà Nẵng** **Số 33 đường B1 Khu đô Thị Vĩnh Điềm Trung, TP nha trang** __Tại Nha Trang:__ **Số 103 đường A2, Khu dân cư 91B, Phường An Bình, Quận Ninh Kiều – Tp Cần Thơ** __Tại Cần Thơ:__
Quản trị kinh doanh,quản trị doanh nghiệp,học quản trị,cách quản lý,kỹ năng quản lý,
Khai giảng khóa học quản trị doanh nghiệp ngắn hạn
Chương trình: QUẢN TRỊ DOANH NGHIỆP”
Khai giảng khóa học quản trị doanh nghiệp ngắn hạn
Chương trình: QUẢN TRỊ DOANH NGHIỆP”
Khai giảng khóa học quản trị doanh nghiệp ngắn hạn
Chương trình: QUẢN TRỊ DOANH NGHIỆP”
Khai giảng khóa học quản trị doanh nghiệp ngắn hạn
Chương trình: QUẢN TRỊ DOANH NGHIỆP”
Đợi xíu...


markdown: Bắt nguồn từ nhu cầu muốn dùng nước hoa xịn của chị em mà ở Việt Nam hiện tại ko có lọ minisize vừa tiền nên khi có mối lấy nước hoa do người nhà đại sứ quán mang về, mình nhập 1 ít nước hoa loại 18ml cho các mẹ dùng thử. Nước hoa này toàn là các thương hiệu nổi tiếng như Channel, DNYK, Givenchy, 212 ***y, Escada, Coco mademoiselle, … Lọ to 50ml ở Việt Nam tớ thấy toàn đề giá 1tr8 đến 2tr ko à Toàn bộ hàng mang từ Dubai về, Dubai là kinh đô xa hoa của thế giới, hàng hóa ở đó chỉ có hàng xa xỉ và chuẩn thôi nên các mẹ yên tâm về chất lượng nhé. Mẹ nào lấy về ùng đều muốn mua thêm nữa vì nước hoa này giữ mùi rất lâu. Dung tích là 18ml, và lọ được thiết kế dưới dạng hình ống để giảm thiểu phần chi phí, còn hình là còn hàng các mẹ nhé Giá đồng hạng lọ 18ml là 380K , riêng có 1 số loại đặc biệt sẽ có giá riêng ạ ^^ Các mẹ nào có nhu cầu thì alo nhé, điện thoại của mình là 0963 288 598 (mình tên Nhung, sinh năm 82 cho cả nhà tiện xưng hô nhé)Y!M d0_xinh_ch0_beNước hoa dành cho phái đẹp Juicy couture Channel Blue - 400k Chance Chanel xanh - 400k Angel Burberry London - 400k Black XS for women - 400k amarige givenchy perfume Anais Anais BVLGARI - 400k Burberry the beat - 400k Channel Allure - 400k Hugo boss MS 01 – Channel No.5 MS03 – Pure Poison Lancome micracle HCHC CHCH - 400k Burberry brit - 400k Weekend burberry - 400k - nợ hình lascote - nợ hình - 400k Escada island kissNước hoa dành cho giới màu râu Paco rabanne black xs - 400k CHCH for men - 400k bvlgari aqva for men - 400k davidoff cool water - 400k Azzaro - 400k Armani code for men - 400k 212 men - 400k Eternity - 400k Hugo boss men givenchy blue lable - 400k fendi life essence - nợ hình - 400k

Server: Apache/2.2.15 (CentOS)


markdown:
- Đăng tin ưu tiên
-
__Các dịch vụ ưu tiên trên Rồng Bay__
-
__Ưu đãi cho khách hàng thường xuyên__ [Sử dụng tài khoản chuyên nghiệp](http://rongbay.com/su-dung-tai-khoan-chuyen-nghiep.html)
-
__Ðăng tin thu hút khách hàng__ [Cách viết tiêu đề thân thiện, lôi cuốn khách hàng](http://rongbay.com/Cach-viet-tieu-de-than-thien-loi-cuon-khach-hang-fp39.html)
-
[Hỏi & đáp](http://rongbay.com/faqs.html)
- Hỗ trợ
- Nếu bạn cần hỗ trợ, vui lòng liên hệ
-
Điện thoại : **(04) 73095555**(ext: 497 / 496 / 495) Hotline : **0936 194 226**(Dành cho cá nhân) **0926 863 922**(Dành cho doanh nghiệp) : [lienhe@rongbay.com](mailto:lienhe@rongbay.com) Skype : [cskh.rongbay](skype:cskh.rongbay?chat)
-
[Mua quảng cáo](http://rongbay.com/mua-quang-cao.html) [Đăng ký](javascript:void(0);) [Đăng nhập](javascript:void(0);)

Set-Cookie: cityOtherRBName=Binh-Thuan; expires=Wed, 23-May-2018 13:14:49 GMT; Max-Age=31536000; path=/; domain=.rongbay.com


Set-Cookie: cityOtherRBName=Binh-Thuan; expires=Wed, 23-May-2018 13:42:35 GMT; Max-Age=31536000; path=/; domain=.rongbay.com

Cache-Control: private, max-age=0, pre-check=0