[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

[SWIFT] Bài 4 - Thêm mới một tập tin mã nguồn

Bài 4 - Thêm mới một tập tin mã nguồn

Bây giờ bạn cần tạo một file nguồn đầu tiên của bạn, và chạy được nó.
Trên XCode, nhấn phải chuột vào thư mục chứa file nguồn main.swift, chọn "New file".

Tiếp theo:

Nhập vào tên file MyFirstSwift:

MyFirstSwift.swift đã được tạo ra:

Tôi sửa nội dung của file nguồn vừa được tạo ra, và thêm vào một hàm sayHello(), chú ý chi tiết về hàm sẽ được đề cập ở một phần khác.

MyFirstSwift.swift
import Foundation
// Nội dung lời chào.
var message = "Hello every body"
// Hàm sayHello()
func sayHello() {
// Gọi hàm print để in thông điệp ra màn hình Console.
// Chú ý: Bạn không thể gọi hàm này tại Top-Level.
print(message)
}

Trong Swift điểm bắt đầu để chạy ứng dụng chính là main.swift, vì vậy để test hàm sayHello() bạn cần phải gọi trong main.swift. Sửa code của main.swift:


main.swift
import Foundation
print("Hello, World!")
// Gọi hàm sayHello()
// (Đã được viết trong MyFirstSwift.swift
sayHello()

Chạy project.


#


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

[SWIFT] Bài 3 - Một số đặc trưng cơ bản của Swift

 Bài 3 - Một số đặc trưng cơ bản của Swift

Bạn cần có một cái nhìn cơ bản về Swift, điều này rất quan trọng.

Top level là gì?

Một dòng lệnh hoặc biểu thức không nằm trong một hàm, khối lệnh hoặc một class nghĩa là nó nằm ở Top-Level.

Top-Level là nơi khai báo sử dụng các thư viện, khai báo biến, hằng số, hàm, lớp. Theo mặc định các biến và hằng số được khai báo ở mức Top-Level của file nguồn này có thể được sử dụng trong các file nguồn khác trong cùng một module (project).

Bạn không thể viết một biểu thức ở Top-Level, chẳng hạn một biểu thức để gọi hàm. Vì vậy gọi hàm print("Hello") để in ra dòng chữ"Hello" ở Top-Level là không hợp lệ, trừ khi bạn làm việc đó ở file nguồn có tên main.swift (Đây là trường hợp ngoại lệ).

Điểm bắt đầu của chương trình Swift:
Trong một chương trình Swift file main.swift là một file đặc biệt, vì nó chính là điểm bắt đầu để chạy chương trình. Bạn có thể gọi hàm hoặc viết biểu thức ở Top-Level trên file nguồn main.swift, đó là một ngoại lệ dành riêng cho file này.
Tôi tạo ra một file nguồn mới có tên newfile.swift, bạn sẽ thấy một thông báo lỗi khi tôi cố tình viết một biểu thức ở Top-Level.


Các biểu thức cần được đặt trong một hàm hoặc khối lệnh.

#


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

[SWIFT] Bài 2 - Tạo Project Swift đầu tiên của bạn

Bài 2 - Tạo Project Swift đầu tiên của bạn

Khởi động XCode



Tạo mới Project:


Tạo Project đơn giản (Ứng dụng Console).

Đặt tên cho project là SwiftBasics:

Tạo một thư mục tại Desktop để chứa các Project của bạn.

Đặt tên thư mục sẽ chứa các project của bạn là SwiftTutorials:

Tiếp theo:


Project của bạn đã được tạo ra.

Tiếp theo:

main.swift là một file nguồn đã được tạo ra khi bạn tạo project, bạn cần chạy file nguồn này,  kết quả  ghi ra màn hình Console dòng chữ "Hello, world".

Nhấn "Enable" để cho phép chương trình chạy ở chế độ dành cho người lập trình.

Tiếp theo:


Chương trình chạy và in ra dòng chữ "Hello, world".

Chúc các bạn thành công với project đầu tiên!

#

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

[Swift] Bài 1 - Giới thiệu ngôn ngữ lập trình SWift

Bài 1 - Giới thiệu ngôn ngữ lập trình SWift

Swift là một ngôn ngữ lập trình hướng đối tượng dành cho việc phát triển iOS và OS X, được giới thiệu bởi Apple tại hội nghị WWDC 2014. Swift được mong đợi sẽ tồn tại song song cùng Objective-C, ngôn ngữ lập trình hiện tại dành cho các hệ điều hành của Apple. Swift được thiết kế là một ngôn ngữ có khả năng phòng chống lỗi cao. Nó được biên dịch với trình biên dịch LLVM. Một tài liệu 500 trang về Swift cũng được phát hành tại WWDC, miễn phí trên iBooks Store.

Ngôn ngữ lập trình Swift

Ngày 2 tháng 6 năm 2014, tại hội thảo WWDC (Apple Worldwide Developers Conference), phiên bản Swift đầu tiên đã được công bố.

Vào tháng 3 năm 2017, chưa đầy 3 năm sau khi chính thức ra mắt, Swift đã đứng đầu trong bảng xếp hạng TIOBE hàng tháng về các ngôn ngữ lập trình phổ biến nhất.[4]


Ví dụ:
let người = ["Trang": 67, "Ngọc": 8, "Duyên": 33, "Hoàng": 25]
 for (tên, tuổi) in người
 {
   println("\(tên) là \(tuổi) tuổi.")
 }






#


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

[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

[C\C++] Cài đặt thuật toán duyệt Đồ thị (DFS, BFS) [Lý thuyết đồ thị]

Cài đặt thuật toán: Duyệt đồ thị theo chiều rộng (BFS) và chiều sâu (DFS)



/* Duyệt đồ thị theo chiều rộng (BFS) và chiều sâu (DFS) */
// Code Turbo C++ #include<conio.h>
#include<iostream.h>
#include<stdlib.h>

void create();  // For creating a graph
void dfs();  // For Deapth First Search(DFS) Traversal.
void bfs();  // For Breadth First Search(BFS) Traversal.

struct node  // Structure for elements in the graph
{
   int data,status;
   struct node *next;
   struct link *adj;
};

struct link  // Structure for adjacency list
{
   struct node *next;
   struct link *adj;
};

struct node *start,*p,*q;
struct link *l,*k;
int main()
{
   int chon;
   create();
   
   while(1)
   
   { 
 cout<<"\nMENU:\n";
      cout<<"1: DFS\n";
 cout<<"2: BSF\n";
      cout<<"3: Exit\n";
      cout<<" Nhap vao su lua chon cua ban : \n";
      cin>>chon;
      switch(chon)
      {
case 1:
   dfs();
   break;
case 2:
        bfs();
   break;
case 3:
   exit(0);
   break;
default:
   cout<<"Chon khong dung!\n";
cout<<"Nhap lai luc chon.\n";
   getch();
      }
   }
   return 0;
}

void create()    // Creating a graph
{
   int dat,flag=0;
   start=NULL;
   cout<<"Nhap cac nut trong do thi (nhap 0 de ket thuc): \n";
   while(1)
   {
      cin>>dat;
      if(dat==0)
break;
      p=new node;
      p->data=dat;
      p->status=0;
      p->next=NULL;
      p->adj=NULL;
      if(flag==0)
      {
start=p;
q=p;
flag++;
      }
      else
      {
q->next=p;
q=p;
      }
   }
   p=start;
   while(p!=NULL)
   {
      cout<<"Cac nut noi ke voi "<<p->data<<" (nhap 0 de ket thuc) : \n";
      flag=0;
      while(1)
      {
cin>>dat;
if(dat==0)
   break;
k=new link;
k->adj=NULL;
if(flag==0)
{
   p->adj=k;
   l=k;
   flag++;
}
else
{
   l->adj=k;
   l=k;
}
q=start;
while(q!=NULL)
{
   if(q->data==dat)
      k->next=q;
   q=q->next;
}
      }
      p=p->next;
   }
   cout<<"\n-------------------------\n";
   return;
}
//Deapth First Search(DFS) Traversal.

void bfs()
{
   int qu[20],i=1,j=0;
   p=start;
   while(p!=NULL)
   {
      p->status=0;
      p=p->next;
   }
   p=start;
   qu[0]=p->data;
   p->status=1;
   while(1)
   {
      if(qu[j]==0)
break;
      p=start;
      while(p!=NULL)
      {
if(p->data==qu[j])
    break;
p=p->next;
      }
      k=p->adj;
      while(k!=NULL)
      {
q=k->next;
if(q->status==0)
{
   qu[i]=q->data;
   q->status=1;
   qu[i+1]=0;
   i++;
}
k=k->adj;
      }
      j++;
   }
   j=0;
   cout<<"Ket qua theo BFS:  ";
   while(qu[j]!=0)
   {
      cout<<qu[j]<<"  ";
      j++;
   }
   getch();
   return;
}


// Breadth First Search(BFS) Traversal.
void dfs()
{
   int stack[25],top=1;
   cout<<"Ket qua theo DFS:  ";
   p=start;
   while(p!=NULL)
   {
      p->status=0;
      p=p->next;
   }
   p=start;
   stack[0]=0;
   stack[top]=p->data;
   p->status=1;
   while(1)
   {
      if(stack[top]==0)
break;
      p=start;
      while(p!=NULL)
      {
if(p->data==stack[top])
   break;
p=p->next;
      }
      cout<<stack[top]<<"  ";
      top--;
      k=p->adj;
      while(k!=NULL)
      {
q=k->next;
if(q->status==0)
{
   top++;
   stack[top]=q->data;
   q->status=1;
}
k=k->adj;
      }
   }
   getch();
   return;
}

//--------------------------------------------------


----------


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