[Thuật toán DFS, BFS] Cài đặt thuật toán duyệt đồ thị - DFS, BFS [Đô thị]

 Cài đặt thuật toán duyệt đồ thị - DFS, BFS trong lý thuyết đồ thị

http://adf.ly/e5LU6

Yêu cầu:
 - Đọc file "D:\\G.txt" chứa ma trận kề biểu diễn đơn đồ thị vô hướng G, có dạng sau:

Ví dụ:
4
0 1 0 1
1 0 1 1
0 1 0 0
1 1 0 0
 
Trong đó:
 + Dòng đầu tiên là số đỉnh
 + Các dòng còn lại biểu diễn ma trận kề của đồ thị G

- In ma trân kề vừa đọc được
- Duyệt đồ thị với thuật toán DFS, BFS. In kết qua ra màn hình
- Đếm số thành phần liên thông
- Kiểm tra xem đồ thị có phải là Euler không ?

Code [ Dev - C++ ]:

#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <values.h>
#define max 100

#define FileIn "D:\\G.txt"

using namespace std;
int chuaXet[max];

// A: ma tran ke cua G, n: so dinh
int A[max][max],n;

// doc file chua do thi G luu vao ma tran A


void Doc_File(int A[max][max], int &n) {
 FILE *f = fopen(FileIn,"rb");
 fscanf(f,"%d",&n);
 cout<<"\n So dinh: "<<n<<"\n Ma tran ke: "<<endl;
 for(int i =0;i<n;i++) {
   for(int j =0;j<n;j++) {
     fscanf(f,"%d",&A[i][j]);
  cout<<A[i][j]<<" ";
}
cout<<endl;
}
fclose(f);
}

// Khoi tao chua xet
void KhoiTao_ChuaXet(){
  for (int i=0;i<max;i++)
   chuaXet[i]=1;
 }

// thuat toan DFS
void DFS(int u){
// xet dinh u
 chuaXet[u]=0;
 cout<<u<<"->";
 for(int v=0;v<n;v++)
   if(chuaXet[v]==1&&A[u][v]==1)
   {
     DFS(v);
    }
 }


// thuat toan BFS

void BFS(int u){
  int queue[max], dau=0,cuoi=0;
  for(int i=0;i<max;i++) queue[i]=0;
    queue[cuoi]=u;
    chuaXet[u]=0;
    cout<<u<<"->";
 
while(dau>=cuoi)
 {
    int p=queue[cuoi];
    cuoi++;
   for(int v=0;v<n;v++)
     if(chuaXet[v]==1&&A[p][v]==1)
      { 
        dau++;
        queue[dau]=v;
        chuaXet[v] =0;
        cout<<v<<"->";
      }
   }
}

// Kiem tra chuaXet
int KT_ChuaXet(){
  for (int i=0;i<n;i++)
     if (chuaXet[i]==1) return i;
return -1;
}


// Dem so thanh phan lien thong

int DemSLT(){
 int slt=0;
 KhoiTao_ChuaXet();
 while (KT_ChuaXet()!=-1)
 {
    int i=KT_ChuaXet();
    DFS(i);
    slt++;
 }
 cout<<"\n So lien thong: "<<slt;
return slt;
}

// tim bac cac dinh
int Deg(int i){
   int deg=0;
   for(int j=0;j<n;j++)
   {
      deg +=A[i][j];
    }
   return deg;
 }


// Kiem tra do thi Euler

void Test_Euler(){
   if (DemSLT()==1){
      // tim bac cua do thi
      int soDinhLe=0;
      for (int i=0;i<n;i++)
         if(Deg(i)%2!=0)
              soDinhLe++;
     if (soDinhLe==0)
           cout<<"\n Do thi la Euler";
     else
             if (soDinhLe==2)
                cout<<"\n Do thi la nua Euler";
            else
                 cout<<"\n Do thi khong phai Euler";
   }
else
    cout<<"\n Do thi khong la Euler";
}

// ham chinh

int main() {
 // doc ma tran
 Doc_File(A,n);
 // Duyet do thi DFS
 KhoiTao_ChuaXet();
 cout<<"\n Duyet do thi DFS: ";
 DFS(0);
 // Duyet do thi BFS
 KhoiTao_ChuaXet();
 cout<<"\n Duyet do thi BFS: ";
 BFS(0);

 // Dem so lien thong
 DemSLT();

 // Kiem tra Euler
 Test_Euler();
return 0;
}


--------------------------
Kế quả:

So dinh: 4
Ma tran ke:
0 1 0 1
1 0 1 1
0 1 0 0
1 1 0 0

Duyet do thi DFS: 0->1->2->3->
Duyet do thi BFS: 0->1->3->2->
--------------------------------

[Download Code tại đây]

http://laptrinhmaytinh.net

[Lập trình hướng đối tượng với Java] Ví dụ lớp trừu tượng (abstract class) [290916]

[Lập trình hướng đối tượng với Java] Ví dụ lớp trừu tượng (abstract class) [290916]
Xây dựng các class:
- Class NV (abstract)
 + Thuộc tính: Họ tên, địa chỉ, năm sinh, hệ số lương
 + Phương thức: Khởi tạo, nhập, tính lương (abstract), in thông tin
- Class LapTrinhVien kế thừa NV, bổ sung thêm
 + Thuộc tính: Số năm công tác
 + Phương thức: Tính lương
Trong đó: lương = hệ số lương * LCB + thưởng
(thưởng = 1,5 LCB nếu số năm công tác >10; ngược lại, thưởng = 1,0 LCB)
* Yêu cầu:
Nhập và in ra thông tin 01 nhân viên là lập trình viên
(họ tên, địa chỉ, năm sinh, lương)
------
Xây dựng Project như hình vẽ:


Code Java:

+ class NV

package vidu_loptruutuong_290916;
import java.util.Scanner;
public abstract class NV {
    // thuoc tinh
    final float LCB=1050000;
    String hoTen, diaChi;
    int namSinh;
    float heSoLuong;
 
    // Phuong thuc khoi tao
    public NV(String hoTen, String diaChi, int namSinh, float heSoLuong){
        this.hoTen=hoTen;
        this.diaChi=diaChi;
        this.namSinh=namSinh;
        this.heSoLuong=heSoLuong;
    }
 
    // Phuong thuc nhap thong tin
    public void NhapTT(){
        Scanner inp=new Scanner(System.in);
        System.out.println("\n * Nhap thong tin nhan vien: ");
        System.out.print("\n + Ho ten: ");
        hoTen=inp.nextLine();
        System.out.print("\n + Dia chi: ");
        diaChi=inp.nextLine();
        System.out.print("\n + Nam sinh: ");
        namSinh=inp.nextInt();
        System.out.print("\n + He so luong: ");
        heSoLuong=inp.nextFloat();
    }
 
    // Phuong thuc tinh luong (abstract)
    public abstract float TinhLuong();
 
    // In thong tin
    public void InTT(){
        System.out.print("\n * In thong tin nhan vien: ");
        System.out.print("\n + Ho ten: "+hoTen);
        System.out.print("\n + Dia chi: "+diaChi);
        System.out.print("\n + Nam sinh: "+namSinh);
        System.out.print("\n + He so luong: "+heSoLuong);
        System.out.print("\n + Luong thang: "+TinhLuong());
     
    }
}


+ class LapTrinhVien

package vidu_loptruutuong_290916;
import java.util.Scanner;
public class LapTrinhVien extends NV{
    // thuoc tinh
    int soNamCT;
 
    // phuong thuc khoi tao
    public LapTrinhVien(String hoTen, String diaChi, int namSinh, float heSoLuong,int soNamCT){
        super(hoTen, diaChi, namSinh, heSoLuong);
        this.soNamCT=soNamCT;
    }
 
    // phuong thuc nhap thong tin
    public void NhapTT(){
        super.NhapTT();
        Scanner inp=new Scanner(System.in);
        System.out.print("\n + So nam cont tac: ");
        soNamCT=inp.nextInt();
    }
 
    // phuong thuc tinh luong
    public float TinhLuong(){
        float thuong;
        if(soNamCT>10)
            thuong=(float)1.5*LCB;
        else thuong=LCB;
        return (heSoLuong*LCB+thuong);
    }
}


+ class ViDu_LopTruuTuong_290916

package vidu_loptruutuong_290916;

public class ViDu_LopTruuTuong_290916 {
    public static void main(String[] args) {
        // Khai bao doi tuong Lap trinh vien
        LapTrinhVien bill =new LapTrinhVien("","",1,1,1);
        bill.NhapTT();
        bill.InTT();
    }
 
}
----------


Cùng bạn tự học CNTT - tailieucntt.org

Hướng dẫn đăng ký hosting, domain với HawkHost [SUPPER SALE]

[Host] Hướng dẫn đăng ký host trên HawkHost


HawkHost được đánh giá là nhà cung cấp dịch vụ host, domain hàng đầu thế giới. Bài viết này sẽ hướng dẫn bạn cách đăng ký host với HawkHost. 

Các bước đăng ký ở HawkHost khá đơn giản, bạn không phải xác minh phức tạp như một số nhà cung cấp hosting khác.

Lưu ý: Có thể dùng Paypal hoặc Visa để thanh toán.

Các bước thực hiện:

Bước 1: Bạn truy cập vào địa chỉ hawkhost.com, click chọn Web Hosting

Hình 1

Bước 2: Chọn gói Hosting phù hợp với nhu cầu sử dụng của bạn

Các gói hosting này đều có cấu hình như nhau, chỉ khác nhau về dung lượng lưu trữ. 
Bạn nên cân nhắc nếu muốn chạy nhiều site trên cùng một hosting thì nên chọn gói có dung lượng ở đĩa cao hơn một tí, giá cũng không cao hơn nhiều.

Hình 2

Bước 3: Chọn domain mà bạn muốn trỏ vào

Có 3 lựa chọn:
- Tích chọn vào ô đầu tiên nếu bạn chưa có domain và nhập domain muốn đăng ký vào ô trống bên dưới để đăng ký. HawkHost sẽ đăng ký cho bạn.
- Tích chọn vào ô thứ 2 nếu như bạn đã có domain ở nơi khác và bây giờ bạn muốn chuyển domain đó đến HawkHost để quản lý.
- Tích chọn vào ô thứ 3 nếu bạn đã có domain ở nơi khác và vẫn muốn quản lý domain ở đó.
Ở đây mình tick vào ô thứ 3 vì mình đã có 1 tên miền ở Godady và mình vẫn muốn quản lý tên miền này ở đó.

Đây là domain chính bạn sẽ sử dụng cho hosting, tốt nhất bạn nên đăng ký domain ở nơi khác. Sau đó nhấn Click to Continue >>


Hình 3

Bước 4: Chọn thời gian sử dụng hosting và vị trí đặt Server.
- Bạn có thể chọn chu kì thanh toán ở bước này (nhỏ nhất là 3 tháng, lớn nhất là 1 năm)
- Phần Hosting location (vị trí) bạn nên chọn Singapore để có đường truyền tốt nhất về Việt Nam
- Cuối cùng nhấn “Add to Cart”.


Hình 4

Bước 5: Nhập coupon và xem lại đơn hàng
Nếu bạn có coupon giảm giá thì trong ô Promotional Code bạn hãy nhập coupon đó vào rồi nhấn Validate Code >> để có được giảm giá, không có thì để trống ô này.


Hình 5

Bạn hãy kiểm tra lại thông tin gói hosting đang đăng ký xem coupon có chính xác hay chưa trong phầnOrder Summary. Nếu phần thông tin như hình dưới tức là coupon vẫn đang hoạt động. (Ở đây mình dùng coupon giảm giá 50% trọn đời)


Hình 6

Nhấn Checkout để thanh toán.

Bước 6: Nhập thông tin thanh toán

Trong phần Your Details bạn hãy nhập thông tin cá nhân của mình vào.
Ở đây như các bạn thấy mình sẽ dùng PayPal để thanh toán, các bạn cũng có thẻ dùng thẻ Visa để thanh toán. Cuối cùng nhấn Complete Order.


Hình 7

Bước 7: Thanh toán

Thanh toán bằng PayPal nên trang tiếp theo sẽ nhập thông tin tài khoản rồi nhấn Pay Now
Thanh toán bằng thẻ Visa thì sẽ cần nhập đúng thông tin thẻ để thanh toán.


Hình 8

Bước 8: Nhận thông tin hosting và sử dụng

Sau khi thanh toán xong, sau vài phút đến vài chục phút bạn sẽ nhận được thông tin tài khoản hosting.

Hi vọng với bài viết này sẽ giúp ích cho bạn trong quá trình đăng ký hosting tại HawkHost.
>> Truy cập HawkHost tại đây.

Chúc các bạn thành công.

Tham khảo couponsmoinhat

Đăng ký Payoneer nhận 25$ miễn phí

Đăng ký Payoneer nhận 25$ miễn phí

Từ trước tới nay PayPal luôn là phương thức thanh toán quốc tế được rất nhiều bạn sử dụng để nhận tiền hoa hồng từ các công ty nước ngoài. Thuận tiện thật đấy nhưng sử dụng PayPal cũng đi kèm với rất nhiều phiền toái như dễ bị limit, khóa tài khoản và chi phí cao.

Với sự ra đời của Payoneer, giờ đây việc nhận thanh toán từ các công ty nước ngoài đã đơn giản, thuận tiện và tiết kiệm chi phí hơn rất nhiều so với PayPal. Chỉ mất khoảng 2h là tiền sẽ về đến tài khoản và bạn có thể rút thẳng về tài khoản ngân hàng Việt Nam (thời gian nhận trong ngày luôn) hoặc rút tiền trực tiếp tại các ATM có biểu tượng visa trên toàn quốc
Payoneer được hỗ trợ bởi Amazon, Teespring/Viralstyle/Teechip/Sunfrogshirt/Teezily, ClickBank, CJ/Linkshares/Shareasale, Airbnb, Fiverr/Upwork… và hơn 3.500 đối tác khác nên gần như bạn kiếm tiền online ở đâu cũng dùng được tài khoản Payoneer để nhận tiền.
Payoneer có nhiều chính sách hỗ trợ cho người dùng, một trong số đó là tài khoản VIP. Khi bạn nhận thanh toán số lượng lớn hàng tháng về tài khoản Payoneer, sẽ được nâng cấp lên VIP với các khoản phí nhận tiền, rút tiền giảm, đặc biệt có thể yêu cầu rút tiền USD.
Điều kiện duy nhất là bạn phải nhận >= 1000$ từ đối tác bất kỳ của Payoneer. Số tiền 25$ sẽ được tự động cộng vào tài khoản sau 1 – 2 tuần đáp ứng điều kiện.
Việc đăng ký tài khoản Payoneer miễn phí hoàn toàn, thao tác thực hiện vô cùng đơn giản.

I. Hướng dẫn đăng ký Payoneer

Nếu giao diện đăng ký không hiện tiếng Việt, ở phần “Select your language” ở phía trên cùng bên phải, bạn chọn Tiếng Việt.
1. Truy cập vào link chương trình khuyến mại, kéo xuống phía dưới và nhấn nút Đăng ký & Nhận $25*

2. Điền thông tin cá nhân như yêu cầu rồi nhấn TIẾP TỤC

3. Điền thông tin liên hệ chi tiết và chính xác rồi nhấn TIẾP TỤC

Lưu ý:
  • Thông tin đăng ký phải chính xác và cụ thể để còn verify thông tin và nhận thẻ sau này. 1 người đăng ký nhiều tài khoản sẽ bị khóa toàn bộ.
  • Địa chỉ: gồm 2 dòng, mỗi dòng không quá 30 ký tự. Dòng trên không đủ thì ghi xuống dòng dưới.
  • City: tên thành phố.
  • Mã bưu chính / Zip: bây giờ là 6 số, xem thêm danh sách Mã bưu điện Zip Code/Postal Code mới ở Việt Nam.
  • Di động: mã nước +84, số điện thoại bạn bỏ số 0 ở đầu.
4. Điền thông tin tài khoản và bảo mật rồi nhấn TIẾP TỤC

Lưu ý: CMND ghi sai sau này sẽ bị khóa tài khoản. Mật khẩu ít nhất 7 ký tự và bao gồm ít nhất 1 số.
5. Điền thông tin tài khoản ngân hàng của bạn và nhấn GỬI để hoàn tất.

Lưu ý:
  • Toàn bộ thông tin ghi tiếng anh hoặc tiếng Việt không dấu.
  • Tên Ngân hàng: bạn có thể search cho nhanh.
  • Tên Chi nhánh: nơi bạn đăng ký tài khoản ngân hàng. Có thể liên hệ Ngân hàng để hỏi lại tên cho chắc.
  • Tên Tài khoản: tên của bạn hoặc người thân (sau này cần phải xác thực mối quan hệ).
  • SWIFT / BIC: tham khảo danh sách này.
Ngay sau khi liên kết ngân hàng, phần đăng ký của bạn đã được hoàn tất. Bạn vui lòng chờ để Payoneer có thể xem và duyệt tài khoản của bạn. Bạn có thể liên hệ bộ phận Chăm Sóc Khách Hàng bất cứ lúc nào để kiểm tra tình trạng tài khoản của bạn.
Khoảng một vài ngày sau bạn sẽ nhận được email có nội dung như thế này:
Nghĩa là bạn đã hoàn thành xong Bước 1: Đăng ký. Giờ bạn có thể đăng nhập vào tài khoản Payoneer của ở link myaccount.payoneer.com với thông tin:
  • Tên đăng nhập: email đăng ký Payoneer
  • Mật khẩu: nhập lúc đăng ký

Khi đăng nhập vào Payoneer, bạn sẽ được yêu cầu tạo 2 câu hỏi bảo mật còn lại (Như vậy tổng cộng là 3 câu & đừng quên lưu lại để sau này đổi mật khẩu, rút tiền, chuyển tiền Payoneer sẽ hỏi bạn câu trả lời cho những câu hỏi này). Lúc này chưa thể làm gì thêm với tài khoản Payoneer của bạn vì yêu cầu đăng ký vẫn đang trong quá trình duyệt.
Có thể bạn sẽ nhận được email yêu cầu xác thực ảnh chụp CMND ở bước này, hoặc sau khi Yêu cầu thẻ. Hãy nhấn link Upload Documents trong email nhận được, điền các thông tin cần thiết như bên dưới rồi upload ảnh lên là xong.

II. Yêu cầu Thẻ Payoneer

Thẻ Payoneer cho phép bạn sử dụng để thanh toán online hoặc rút tiền mặt trực tiếp từ những cây ATM có logo biểu tượng visa. Đặt thẻ và nhận thẻ hoàn toàn miễn phí, tuy nhiên bạn cần cân nhắc một số điều sau trước khi quyết định:
  • Bạn không cần thẻ vẫn rút được tiền về trực tiếp tài khoản ngân hàng, chi phí rẻ hơn khi rút ở ATM và có tỉ giá tốt hơn. Thời gian nhận trong ngày, sáng rút chiều nhận được luôn!
  • Sử dụng thẻ sẽ mất chi phí hàng năm 29.95$.
  • Chi phí sử dụng thẻ khi thanh toán online hoặc rút tiền ở cây ATM khá lớn.
Do đó, nếu không thật sự cần thiết, bạn không nên Yêu cầu thẻ Payoneer làm gì. Tham khảo bài viết này để hiểu rõ hơn.
Ngay sau khi đơn đăng ký của bạn được duyệt, hãy đăng nhập vào trang My Account và đặt thẻ Payoneer cho bạn.

Thẻ sẽ được chuyển về tận nhà bạn theo địa chỉ đã đăng ký với dịch vụ của DHL, thời gian có thể mất 1 đến 2 tháng tùy địa điểm. Để theo dõi quá trình vận chuyển thẻ, bạn hãy tham khảo thêm bài viết này.
Đến bước này là xem như hoàn thành, bạn có thể nhận tiền ngay từ các đối tác của Payoneer rồi đấy. Tuy chưa nhận được thẻ Payoneer Mastercard nhưng bạn đã có tài khoản US để nhận tiền. Xem hướng dẫn bước dưới.
Sau khi nhận được thẻ, các bạn hãy đăng nhập vào tài khoản Payoneer sử dụng email và mật khẩu đã đăng ký trước đó và thực hiện theo hướng dẫn gửi kèm để kích hoạt thẻ. 

III. Lấy thông tin tài khoản ngân hàng US để nhận tiền về Payoneer

Để nhận tiền về tài khoản Payoneer, bạn cần cung cấp thông tin ngân hàng US. Để lấy thông tin tài khoản bạn chọn Receive / Global Payment Service trên menu.

Toàn bộ thông tin Payoneer của bạn sẽ hiển thị ở đây, một số thông tin quan trọng cần dùng như:
  1. Bank Name
  2. Routing (ABA) hoặc Bank Routing Number
  3. Account Number
  4. Account Type
  5. Beneficiary Name

Bạn lấy thông tin này điền vào phần thanh toán của trang web để nhận được tiền qua Payoneer.
Toàn bộ hướng dẫn đăng ký tài khoản Payoneer, nhận thẻ và sử dụng như vậy là xong. Chúc bạn tiền load về tới tấp.
Nếu cần support gì bạn hãy để lại comment bên dưới hoặc vào phần Liên hệ.
Nhấn vào link sau để bắt đầu đăng ký tài khoản Payoneer!


#


Tailieucntt.org đồng hành cùng bạn

Hướng dẫn đầy đủ cách mua hàng trên Amazon ship về Việt Nam

Cách đặt hàng và kinh nghiệm tự mua hàng trên Amazon dễ dàng


Amazon là 1 website bán hàng trực tuyến nổi tiếng không chỉ trong khu vực nước Mỹ mà còn lan rộng ra khắp các nước bởi đây là nơi tập trung số lượng hàng hóa hết sức đa dạng của các thương hiệu trên thế giới, thuộc các lĩnh vực như thời trang, đồ điện tử, đồ gia dụng, đồ chơi, sách vở, hàng tiêu dùng,…. 
Tại Việt Nam, mặc dù trên Amazon chưa có hệ thống ship về trực tiếp nhưng nhiều chủ shop bán hàng online qua website, bán hàng trên Sendo, Facebook vẫn không bỏ qua cơ hội nhập hàng từ website lớn này. Bạn cũng là 1 chủ shop? Bạn đang băn khoăn không biết chọn lựa, đặt hàng trên Amazon và cách mua hàng trên amazon ship về việt nam như thế nào? Bài viết này sẽ hướng dẫn bạn cách mua hàng trên amazon ship về Việt Nam một cách dễ dàng và an toàn.

Bước 1: Đăng kí tài khoản miễn phí

Đầu tiên, bạn vào trang chủ www.Amazon.com,
sau đó trỏ chuột vào Your Account, chọn Start here.

Cách thức và kinh nghiệm tự đặt hàng trên Amazon

Và lần lượt điền đầy đủ các thông tin sau:




Trên Amazon chưa có hệ thống ship hàng về Việt Nam nên bạn cần phải có 1 địa chỉ tại Mỹ để nhận hàng. Đó có thể là người thân quen hoặc đơn vị nhận ship hàng về Việt Nam cho bạn.


Và nhất thiết phải có thẻ thanh toán quốc tế

Bước 2: Chọn hàng và đánh giá sản phẩm, người bán

– Trên Amazon, có 3 nhóm hàng để bạn lựa chọn:


+ Ships from and sold by Amazon.com (Người bán và giao hàng bởi Amazon): Hàng của Amazon nằm trong kho Amazon. Với những sản phẩm thuộc nhóm này, các bạn có thể hoàn toàn an tâm về chất lượng cũng như khâu vận chuyển cũng sẽ nhanh chóng hơn.

+ Sold by Think Fast and Fulfilled by Amazon (Người bán khác và giao hàng bởi Amazon): Hàng được bán bởi 1 cá nhân hay shop nào đó nhưng sẽ để hàng tại kho của Amazon kiểu dạng như ký gửi. Sản phẩm thuộc nhóm này cũng khá đảm bảo bởi Amazon chịu trách nhiệm vận chuyển nên sẽ trải qua khâu kiểm định chất lượng.

+ Ships from and sold by Sneaker Ethics (Bán và Giao hàng bởi một người khác): Hàng hóa không chịu sự kiểm soát của Amazon mà là do các cá nhân hoặc shop khác đăng bán và quản lý. Nhóm này rất dễ mang đến rủi ro cho bạn. Vì vậy, bạn nên xem xét kĩ về người bán trước khi quyết định mua hàng trên Amazon.

– Để đánh giá uy tín của người bán, bạn có thể xem xét trên 2 yếu tố: Ratings và feedbacks.

+ Ratings (điểm đánh giá của người bán): Với những chủ shop đã có điểm đánh giá cao nghĩa là họ đã hoạt động kinh doanh lâu năm tại Amazon và đã nhận được sự tin tưởng từ những người mua hàng trước đây. Vì vậy bạn nên ưu tiên chọn những chủ shop có Ratings cao (càng nhiều sao càng tốt).

+ Feedbacks (Phản hồi từ người mua): Trên các trang thông tin về chủ shop, Amazon cho phép hiển thị công khai tất cả các đánh giá, phản hồi từ khách hàng. Bạn có thể dựa vào những feedbacks này để đưa ra đánh giá và quyết định có giao dịch với chủ shop đó hay không.

– Thông tin sản phẩm:

Những thông tin về sản phẩm bạn cần quan tâm khi đặt hàng đó là thông số, cấu hình, giá bán, sản phẩm thuộc nhóm nào trong 3 nhóm trên, đánh giá của khách hàng về sản phẩm,…


Bước 3: Chọn địa chỉ đến và thời gian vận chuyển

Bạn kiểm tra lại địa chỉ gửi hàng đến và lựa chọn thời gian vận chuyển thích hợp. Thời gian vận chuyển càng nhanh thì chi phí càng cao và ngược lại. Đối với những sản phẩm thuộc kho của Amazon, khi bạn mua với hóa đơn trên 25 USD và ship cùng lúc về 1 địa điểm sẽ được miễn phí cước vận chuyển (thời gian vận chuyển trong vòng 3-5 ngày).


Bước 4: Kiểm tra sản phẩm trong giỏ hàng và thanh toán


Cách kiểm tra sản phẩm khi mua hàng trên amazon

Đây là bước cuối cùng cần thiết có trong thói quen đặt hàng trên tất cả các website của bạn, không chỉ riêng trên Amazon. Sau khi kiểm duyệt, bạn nhấn Place your oder để chính thức thanh toán đơn hàng. Một lưu ý rằng từ sau khi thanh toán cho tới lúc bên Amazon xác nhận đơn hàng, bạn vẫn còn thể thay đổi, thêm bớt sản phẩm hoặc hủy đơn hàng.
Một số lưu ý khi mua hàng trên Amazon

– Bạn nên đặt hàng trên Amazon ở Mỹ thì sẽ an toàn hơn và phí ship tại Mỹ rẻ hơn, nếu mua nhiều còn được miễn phí. Còn trong trường hợp mua hàng của đối tác khác trên Amazon thì nên quy về 1 mối, nghĩa là mua của 1 đối tác để tiết kiệm thời gian và chi phí vận chuyển.

– Việc đăng ký làm thành viên để nhận thông tin ưu đãi, giảm giá sẽ giúp bạn chủ động nắm bắt được và đặt mua hàng với giá cực tốt.


Tham khảo: blog.bizweb

[SWIFT] Bài 8 - Mảng trong Swift (array)

Bài 8 - Mảng trong Swift (array)

* Mảng một chiều

Mảng của Swift về bản chất là một Struct, nó khác với một mảng trong các ngôn ngữ khác như Java, C#,...Mảng của Java, C# có số phần tử cố định và không thể thêm hoặc bớt số phần tử, trong khi đó mảng của Swift lại làm được điều này.

Đây là hình minh họa về mảng một chiều có 5 phần tử, các phần tử được đánh chỉ số từ 0 tới 4.

Cú pháp khai báo mảng một chiều:

// Cách 1:

// Khai báo một mảng các số Int, và chỉ định các phần tử.
var years: [Int] = [ 2001, 2003, 2005, 1980, 2003 ];

// Hoặc (Swift tự hiểu đây là một mảng các số Int).
var years = [ 2001, 2003, 2005, 1980, 2003 ];



// Cách 2:
// Khai báo một mảng các số Float.
// 3 phần tử, và các phần tử đều có giá trị 0.
var salaries:[Float] = [Float](count: 3,repeatedValue :0 );

// Hoặc:
var salaries = [Float](count: 3,repeatedValue :0 );

// Cách 3:
// Khai báo một mảng rỗng (Không có phần tử nào).
var emptyArray:[Int] = [Int]()

Ví dụ:
ArrayExample1.swift

import Foundation
func arrayExample1() {
// Cách 1:
// Khai báo một mảng các số Int, chỉ định các phần tử.
var years: [Int] = [ 2001, 2003, 2005, 1980, 2003 ];
print("--- years --- ");
// count là một property của mảng, nó trả về số phần tử của mảng.
print("Element count of array years = \(years.count)");
// Sử dụng vòng lặp for để in ra các phần tử của mảng.
for (var i = 0; i < years.count; i = i + 1) {
print("Element at \(i) = \(years[i])");
}
print("--- salaries --- ");
// Cách 2:
// Khai báo một mảng các số Float.
// 3 phần tử, và các phần tử đều có giá trị 0.
var salaries:[Float] = [Float](count: 3,repeatedValue :0 );
// Gán các giá trị cho các phần tử.
salaries[0] = 1000;
salaries[1] = 1200;
salaries[2] = 1100;
// Sử dụng vòng lặp for để in ra các phần tử của mảng.
for (var i = 0; i < salaries.count; i = i + 1) {
print("Element at \(i) = \(salaries[i])");
}

}

Kết quả chạy ví dụ:



Mảng của Swift là một Struct

Trong Swift, mảng bản chất là một Struct (Cấu trúc) vì vậy nó có các thuộc tính và phương thức. Bao gồm các phương thức thêm các phần tử vào mảng hoặc loại bỏ các phần tử.

// Khai báo một mảng các String, có 2 phần tử.
var languages = ["Java","C#"]

// Sử dụng phương thức append() để nối 1 phần tử vào cuối của mảng.
languages.append("Swift")

// Cũng có thể sử dụng toán tử += để nối một mảng vào cuối của mảng hiện tại.
languages += ["C/C++", "Perl"];

Ví dụ:
ExpaddingArrayExample.swift

import Foundation

func expaddingArrayExample() {
// Khai báo một mảng các String, với 2 phần tử.
var languages = ["Java","C#"]
// Sử dụng phương thức append() để nối thêm 1 phần tử vào cuối.
languages.append("Swift")
// Cũng có thể sử dụng toán tử += để nối một mảng khác vào cuối.
languages += ["C/C++", "Perl"];
// Sử dụng vòng lặp for-in.
for lang in languages {
print("Language: " + lang)
}
}

Chạy ví dụ:



enumerate
Phương thức enumerate() của mảng trả về đối tượng của EnumerateSequence struct. Mỗi phần tử của EnumerateSequence chứa thông tin chỉ số, và phần tử của mảng ban đầu.

Xem thêm về struct tại:

Ví dụ duyệt các phần tử của một mảng:
EnumerateArrayExample.swift

import Foundation
import Cocoa
func enumerateArrayExample() {
// Khai báo một mảng các String với 3 phần tử.
var languages :[String] = ["Java", "C#", "Swift"]


for (index, element ) in languages.enumerate() {
print("Element at \(index) = \(element)");
}
}

Chạy ví dụ:




#


Tailieucntt.org đồng hành cùng bạn

[SWIFT] Bài 7 - Vòng lặp trong Swift

Bài 7 - Vòng lặp trong Swift

Vòng lặp được sử dụng để chạy lặp lại một khối lệnh. Nó làm chương trình của bạn thực thi lặp đi lặp lại một khối lệnh nhiều lần, đây là một trong các nhiệm vụ cơ bản trong lập trình.
Swift hỗ trợ 4 loại vòng lặp khác nhau:

FOR .. IN
FOR
WHILE
REPEAT WHILE

* Vòng lặp for in
Vòng lặp for .. in dùng để duyệt trên một tập hợp, hoặc một mảng.
Cú pháp:

// <element>: Phần tử
// <collection>: Tập hợp
for <element> in <collection> {
  // Các câu lệnh
}


Ví dụ dưới đây sử dụng for .. in để duyệt trên một mảng (Khái niệm mảng sẽ được đề cập ở phần tiếp theo).
ForInExample1.swift

import Foundation
func forInExample1() {
// Khai báo một mảng các String với 5 phần tử.
var languages:[String] = ["Java","C#", "C/C++", "Swift", "Ruby"]
for lang in languages {
print("Language " + lang)
}
}

RUN:


* Vòng lặp for
Cấu trúc của vòng lặp FOR:

// initialize variable: Khởi tạo một biến.
// condition: Điều kiện.
// updates new value for variable: Cập nhập giá trị mới cho biến.
for (initialize variable ; condition ; updates new value for variable )
{
// Các câu lệnh, thực hiện khi condition cho giá trị true
}


Ví dụ:

// Ví dụ 1:
// Tạo một biến x và gán giá trị 0 cho nó.
// Điều kiện kiểm tra là x < 5
// Nếu x < 5 đúng thì khối lệnh được thực thi.
// Sau mỗi bước lặp (iteration), giá trị của x được tăng lên 1.
for (int x = 0; x < 5 ; x = x + 1)
{
// Làm gì đó tại đây khi x < 5 là đúng (true).
}


Ví dụ 2:

// Tạo một biến x và gán giá trị ban đầu của nó là 2
// Điều kiện kiểm tra là x < 15
// Nếu x < 15 đúng thì khối lệnh được chạy
// Sau mỗi bước lặp (iteration), giá trị của x được tăng lên 3.
for (int x = 2; x < 15 ; x = x + 3)
{
// Làm gì đó tại đây khi x < 15 là đúng (true).
}

ForLoopExample.swift

import Foundation

func forLoopExample() {
print("For loop example");
// Khai báo một biến x và gán giá trị 2 cho nó.
// Điều kiện là x < 15
// Nếu x < 15 là đúng (true) thì thực hiện khối lệnh.
// Sau mỗi bước lặp (iteration), giá trị của x được tăng thêm 3.
for (var x = 2; x < 15; x = x + 3) {
print( );
print("Value of x = \(x)");
}
}

Kết quả chạy ví dụ:


* Vòng lặp while
Cú pháp:

// condition: Điều kiện
while (condition)
{
  // Trong khi 'condition' là đúng, thì thực thi khối lệnh.
}


Ví dụ:

// Khai báo một biến x.
int x = 2;
while ( x < 10)
{
// Làm gì đó tại đây khi x < 10 còn đúng.
...
// Cập nhập giá trị mới cho biến x.
x = x + 3;
}

WhileLoopExample.swift

import Foundation
func whileLoopExample() {
print("While loop example");
// Khai báo một biến và gán giá trị 2 cho nó.
var x = 2;
// Điều kiện là x < 10
// Nếu x < 10 là đúng (true) thì thực hiện khối lệnh.
while (x < 10) {
print("Value of x = \(x)");
x = x + 3;
}
}

Kết quả chạy ví dụ:



* Vòng lặp repeat-while
Cú pháp của vòng lặp REPEAT-WHILE

// Đặc điểm của vòng lặp 'repeat-while' là nó sẽ thực khi khối lệnh ít nhất 1 lần.
// Mỗi lần chạy xong khối lệnh nó lại kiểm tra điều kiện xem có thực thi tiếp không.
repeat {
// Làm gì đó tại đây
// Sau đó mới kiểm tra tiếp điều kiện xem có tiếp tục chạy khối lệnh này nữa hay không.
} while (condition)

RepeatWhileExample.swift

import Foundation
func repeatWhileExample() {
print("Repeat-While loop example")
// Khai báo một biến và gán giá trị 2 cho nó.
var x = 2
// Thực thi khối lệnh ít nhất một lần.
// Sau mỗi lần thực hiện xong khối lệnh,
// nó sẽ kiểm tra điều kiện,
// nếu điều kiện vẫn đúng, khối lệnh sẽ được thực thi tiếp.
repeat {
print("Value of x = \(x)")
x = x + 3;
} while (x < 10)
}

Kết quả chạy ví dụ:


*  Lệnh break trong vòng lặp

break là một lệnh nó có thể nằm trong một khối lệnh của một vòng lặp. Đây là lệnh kết thúc vòng lặp vô điều kiện.



LoopBreakExample.swift

import Foundation

func loopBreakExample() {
print("Break example");
// Khai báo một biến và gán giá trị 2 cho nó.
var x = 2;
while (x < 15) {
print("----------------------");
print("x = \(x)");
// Nếu x = 5 thì thoát khỏi vòng lặp.
if (x == 5) {
break;
}
// Tăng giá trị của x thêm 1.
x = x + 1;
print("After +1, x = \(x)");
}
}

Kết quả chạy ví dụ:


* Lệnh continue trong vòng lặp

continue là một lệnh, nó có thể nằm trong một vòng lặp, khi bắt gặp lệnh continue chương trình sẽ bỏ qua các dòng lệnh trong khối phía dưới của continue và bắt đầu một vòng lặp mới.


LoopContinueExample.swift

import Foundation
func loopContinueExample() {
print("Continue example")
// Khai báo một biến và gán giá trị 2 cho nó.
var x = 2
while (x < 7) {
print("----------------------")
print("x = \(x)")
// Toán tử % là phép chia lấy số dư.
// Nếu x là số chẵn, thì bỏ qua các dòng lệnh phía dưới của 'continue'
// và bắt đầu bước lặp tiếp theo (Nếu điều kiện vẫn đúng).
if (x % 2 == 0) {
// Tăng giá trị của x thêm 1
x = x + 1
continue
}
else {
// Tăng giá trị của x thêm 1.
x = x + 1
}
print("After +1, x = \(x)")
}
}

Kết quả chạy ví dụ:




#


Tailieucntt.org đồng hành cùng bạn

[SWIFT] Bài 6 - Câu lệnh rẽ nhánh (if-else)

Bài 6 - Câu lệnh rẽ nhánh (if-else)

*  Câu lệnh If-else

if là một câu lệnh kiểm tra một điều kiện gì đó trong Swift. Chẳng hạn: Nếu a > b thì làm gì đó ....
Các toán tử so sánh thông dụng:

Toán tử         |  Ý nghĩa               |   Ví dụ
    >            Lớn hơn                      5 > 4 là đúng (true)
   <             Nhỏ hơn                      4 < 5 là đúng (true)
   >=          Lớn hơn hoặc bằng      4 >= 4 là đúng (true)
   <=          Nhỏ hơn hoặc bằng     3 <= 4 là đúng (true)
   ==          Bằng nhau                   1 == 1 là đúng (true)
   !=           Không bằng nhau        1 != 2 là đúng (true)
   &&        Và                                 a > 4 && a < 10
   ||             Hoặc                             a == 1 || a == 4


// condition: Điều kiện.if ( condition ) {  // Làm gì đó tại đây.}

Ví dụ:

// Ví dụ 1:
if ( 5 < 10 ) {
   print( "Five is now less than ten");
}
 // Ví dụ 2:
 if ( true ) {
    print( "Do something here");
}

Cấu trúc đầy đủ của if - else if - else:

// Chú ý rằng sẽ chỉ có nhiều nhất một khối lệnh được thực thi.
// Chương trình kiểm tra các điều kiện từ trên xuống dưới.
// Khi bắt gặp một điều kiện đúng, khối lệnh đó sẽ được thự thi.
// Các điều kiện còn lại sẽ bị bỏ qua.
...
// Nếu condition1 là đúng thì ..
if (condition1 )
{
  // Làm gì đó nếu condition1 là đúng (true).
}
// Ngược lại nếu condition2 là đúng thì ...
else if(condition2 )
{
  // Làm gì đó tại đây nếu condition2 là đúng (condition1 là sai).
}
// Ngược lại nếu conditonN là đúng thì ...
else if(conditionN )
{
  // Làm gì đó ở đây nếu conditionN là đúng
  // (Tất cả các điều kiện ở trên là sai).
}
// Ngược lại (Khi tất cả các các điều kiện ở trên là sai).
else {
// Làm gì đó.
}

IfElseExample.swift

import Foundation

func ifElseExample() {
// Khai báo một biến kiểu UInt32 với giá trị ngẫu nhiên.
// (Hàm arc4random() trả về một giá trị ngẫu nhiên).
var randomValue: UInt32 = arc4random()
print("Random value = " + String(randomValue))
// Chia cho 200 và trả về số dư (remainder).
var age: UInt32 = randomValue % 200;
print("Your age= " + String(age)) 
// Kiểm tra nếu age < 80 thì..
if (age < 80) {
  print("You are pretty young");
}

else if age >= 80 && age <= 100 {
print("You are old");
}
// Ngược lại (Các trường hợp còn lại).
else {
print("You are verry old");
}

}

RUN:


* Câu lệnh Switch-Case

Một số ví dụ sử dụng switch:

SwitchExample1.swift

import Foundation
func switchExample1() {
// Đề nghị người dùng chọn một lựa chọn.
print("Please select one option:")
print("1 - Play a game")
print("2 - Play music")
print("3 - Shutdown computer")
print("---------------------")

var randomValue: UInt32 = arc4random()
// Chia cho 5 và trả về số dư (remainder) (0, 1, 2, 3, 4)
var myValue:UInt32 = randomValue%5
// Khai báo một biến 'option'.
// Ép kiểu UInt32 thành kiểu Int.
// 'option' sẽ có giá trị 1, 2, 3, 4 hoặc 5.
var option:Int = Int(myValue) + 1
// String(option): Ép kiểu (cast) thành String.
print("You select: " + String(option))
// Kiểm tra các giá trị của 'option'.
switch (option) {
case 1:
print("You choose to play the game");
case 2:
print("You choose to play the music");
case 3:
print("You choose to shutdown the computer");
// Các trường hợp còn lại.
default:
print("Nothing to do...");
}

}

RUN:


Bạn có thể gộp nhiều giá trị vào trong một trường hợp (case):
SwitchExample2.swift

import Foundation

func switchExample2() {
// Khai báo một biến và gán giá trị 3 cho nó.
var option = 3
print("Option = \(option) ")
// Kiểm tra giá trị của 'option'.
switch (option) {
case 1:
print("Case 1")
// Trường hợp giá trị là 2,3,4,5
case 2, 3, 4, 5:
print("Case 2,3,4,5!!!")
// Trường hợp giá trị từ 6 -> 10
case 6...10:
print("Case 6...10")
// Trường hợp giá trị từ 11 -> 20 và là số lẻ.
case 11...20 where option % 2 == 1:
print("Case 11...20 and odd")
default:
print("Nothing to do...")
}


}

RUN:



Fallthrought:

Nếu bạn đã làm việc với các ngôn ngữ khác như Java, C# bạn có thể nhận thấy cú pháp sử dụng switch có sự khác biệt so với Swift. Trong Swift mỗi khi một trường hợp (case) đúng, khối lệnh của trường hợp (case) này sẽ được thực thi, và các trường hợp khác không được chạy.

Với Java, C# khi một trường hợp đúng khối lệnh của trường hợp đó được chạy, và nếu không có lệnh break thì khối lệnhcase (hoặc default) tiếp theo sẽ được thực thi.

Swift đã tự động break sau khi nó thực thi xong một khối lệnh case.
Swift thêm vào lệnh fallthrought (Lệnh này không có trong Java, C#), fallthrought nói với chương trình rằng tiếp tục thực thi khối lệnhcase (hoặc khối lệnh default) kế tiếp.

Hãy xem một ví dụ minh họa:


SwitchFallthroughExample.swift

import Foundation
func switchFallthroughExample() {

var option = 15
switch (option) {

case 0...10:
print("Case 0...10")
// fallthrough: Thực thi trường hợp tiếp theo.
fallthrough
case 11...20:
print("Case 11...20")
// fallthrough: Thực thi trường hợp tiếp theo.
fallthrough
case 21...30:
print("Case 21...30")
// fallthrough: Thực thi trường hợp tiếp theo.
fallthrough
case 31...40:
print("Case 31...40")
case 41...50:
print("Case 41...50")
default:
print("Default case")
}
}

RUN:




#


Tailieucntt.org đồng hành cùng bạn

[SWIFT] Bài 5 - Kiểu dữ liệu, biến và khai báo biến



Bài 5 - Kiểu dữ liệu, biến và khai báo biến
* Các kiểu dữ liệu trong Swift
Kiểu dữ liệu   |     Độ rộng   |     Phạm vi giá trị
   Int8                1byte                -127 tới 127
   UInt8              1byte                0 tới 255
    Int32              4bytes             -2147483648 tới 2147483647
    UInt32           4bytes              0 tới 4294967295
    Int64              8bytes              -9223372036854775808 tới 9223372036854775807
    UInt64           8bytes              0 tới 18446744073709551615
    Float              4bytes              1.2E-38 tới 3.4E+38 (~6 digits)
    Double           8bytes              2.3E-308 tới 1.7E+308 (~15 digits)
* Biến và khai báo
Một biến xác định bởi một cái tên cho một khu vực lưu trữ dữ liệu mà chương trình của bạn có thể thao tác. Mỗi biến trong Swift có một kiểu dữ liệu cụ thể, trong đó xác định kích thước và phạm vi giá trị có thể được lưu trữ trong bộ nhớ, và tập hợp các toán tử có thể áp dụng cho biến.
Biến có thể thay đổi giá trị trong quá trình tồn tại của nó trong chương trình. Các biến có giá trị cố định được gọi là các hằng số. Sử dụng từ khóa let để khai báo một biến là hằng số.
Trong swift, bạn có thể khai báo một biến ở Top-Level hoặc là một biến địa phương nằm trong một class hoặc hàm. Với các biến được khai báo ở Top-Level nó có thể được sử dụng tại các file nguồn khác trong cùng một module (Project).

Khai báo một biến:
// <Variable name>: Tên biến
// <Data Type>: Kiểu dữ liệu
var <Variable name> : <Data Type> ;
// Khai báo một biến, và gán giá trị cho nó.
// <Variable name>: Tên biến
// <Data Type>: Kiểu dữ liệu
// <value>: Giá trị
var <Variable name> : <Data Type> = <value>;
// Khai báo một hằng số
// <Constant name>: Tên hằng số.
// <Data Type>: Kiểu dữ liệu
// <value>: Giá trị
let <Constant name> : <Data Type> = <value>;
// Ví dụ:
// Khai báo một biến
// Tên của biến: year
// Kiểu dữ liệu: Int
// Giá trị: 2016
var year: Int = 2016;
// Với một số kiểu nguyên thủy (primitive type) (Int, Double, Bool) và String,
// bạn có thể bỏ qua trong khai báo.
// Swift có thể hiểu ý định của bạn...
// Được suy luận là String
var languageName = "Swift" var version = 1.0
// Doublevar introduced = 2014
// Intvar isAwesome = true
// Bool

VariableExample.swift
import Foundation
// Sử dụng từ khoá 'let' để khai báo một hằng số (constant).
// Tên hằng số là COPYRIGHT, kiểu dữ liệu là String,
// và giá trị là "o7planning".
// (Đây là một hằng số được khai báo ở Top-Level
// Nó có thể được sử dụng trong các file nguồn khác trong project).
let COPYRIGH: String = "o7planning"
// Sử dụng từ khoá 'var' để khai báo một biến (variable).
// Tên của biến là: year
// Kiểu dữ liệu: Int
// Giá trị: 2016
// (Đây là một biến được khai báo ở Top-Level
// Nó có thể được sử dụng trong các file nguồn khác trong project).
var year: Int = 2016
func variableExample()
{
// Khai báo một hằng số kiểu số nguyên (integer)
// Bạn không thể gán một giá trị mới cho hằng số.
let MAX_SCORE = 100;
// Khai báo một số nguyên (integer).
var score = 90;
// Khai báo một chuỗi (string).
var studentName = "Tom"
// In chuỗi ra màn hình
Console. print("Hi \(studentName)")
print("Your score: \(score)/\(MAX_SCORE)")
print("Assign new value for studentName")
// Gán giá trị mới cho biến
studentName. studentName = "Jerry"
print("Hi \(studentName)")} 
Sửa code của file nguồn main.swift:
main.swift
main.swiftmain.swift import Foundation // Gọi hàm variableExample() 
// được định nghĩa trong file VariableExample.swiftvariableExample()
Kết quả chạy ví dụ:

#


Tailieucntt.org đồng hành cùng bạn