Thứ Sáu, 20 tháng 6, 2014

Một thoáng Thành Nam

Bấy nay léo nghoéo  với SEO sèo
Chẳng có thời gian chơi tí teo...

Từ tết đến giờ cứ Google với SEO, Adword, Facebook, G+... đầu óc quay mòng mòng. Bữa qua đưa thằng nhóc về nghỉ hè, chiều nay lại lên Hà Nội. Sáng xách máy ra đường (chả là có em Fuji tha về cả tháng nay mà chưa có thời gian vọc nữa) thử tay nghề. Ai ngờ thợ amateaur lại gặp đúng hôm trời đất tối đen như mực. Ô hô, thôi thì cứ chụp choẹt ào đi.

Dù sao cũng là: "Một thoáng Thành Nam"
------------------------------------------

Thành Nam - là một tên gọi của của Nam Định, vì nằm ở phía Nam của thành Thăng Long nên được gọi như vậy.

SEOer săn ảnh
 6h04' đường phố vẫn rất ít người qua lại.

SEOer săn ảnh
Rạp Mùng 3 tháng 2 (thường được gọi tắt là 32) là nơi thường diễn ra các chương trình văn hóa, văn nghệ. Nó có kiến trúc giống với Nhà hát lớn Hà Nội. Mặt tiền của rạp là một sảnh rộng nơi thường diễn ra các chương trình ca nhạc ngoài trời.

SEOer săn ảnh
 Khách sạn Vị Hoàng
Sông kia rày đã lên đồng- Chỗ làm nhà cửa, chổ trồng ngô khoai - Vẳng nghe tiếng ếch bên tai- Giật mình, còn tưởng tiếng ai gọi đò (Tú Xương)
Sông lấp trước khi bị lấp có tên là sông Vị Hoàng, chảy qua thành phố Nam Định. Giờ thì cũng chẳng có nhà cửa, ngô khoai...

SEOer săn ảnh
 Nhà thủy tạ, đang được sửa sang, hình hiện đại nhưng kém lãng mạn hơn. Trước nó có cầu thang xoắn ốc và nhìn cổ kính hơn.

SEOer săn ảnh
Một phần (mới được đưa vào sử dụng) của công viên Vị Xuyên. Trước ở đây là trường cấp 2 Hoàng Văn Thụ và trường Phùng Chí Kiên.

SEOer săn ảnh
 Phòng học của mình hồi lớp 8 giờ là một luống hoa màu hồng rất đẹp.

SEOer săn ảnh
 Còn phòng học hồi lớp 9 thì nhường chỗ cho một dãy xoài, mấy cây này chắc phải vài năm nữa mới lớn và có quả được.

SEOer săn ảnh
 Nhà thờ Khoái Đồng, được Pháp xây dựng từ thế kỉ trước, giờ đang được sửa lại.

SEOer săn ảnh
 Trường cấp 3 Nguyễn Khuyến - nơi mình học vốn là 1 Trường Dòng cải tạo lại, hai bên vẫn để tên Thánh San Tomas
SEOer săn ảnh
 Một đôi bạn trẻ nô đùa, đuổi nhau trong công viên, "nàng chạy khá nhanh". Không biết nàng có đang nghĩ "liệu mình có chạy nhanh quá không nhỉ"

SEOer săn ảnh
 Sông Đào - Được gọi như thế vì sông được đào dưới thời nhà Nguyễn, nối sông Hồng và sông Đáy cho tiện giao thông - mà cũng có thể do nước sông luôn có màu đỏ, nặng phù sa.

SEOer săn ảnh
 Xa xa phía trước là cầu Đò Quan. Thuyền ai qua bến Đò Quan -  Hãy dừng chèo lại, em than đôi lời

SEOer săn ảnh
 Bên kia sông...

Thứ Năm, 19 tháng 6, 2014

Bài 23 - Giới thiệu CocoStudio - Công cụ tạo Animation cực cool (Part 1)

Hi mọi người!

Animation là 1 phần không thể thiếu trong Game. Ở bài trước, chúng ta đã cùng nhau nghiên cứu cách tạo Animation bằng Sprite Sheet. Cách này có ưu điểm là đơn giản dễ làm, tuy nhiên sẽ gặp phải vấn đề về bộ nhớ  nếu khối lượng Sprite Sheet lớn, số lượng ảnh chuyển động phải vẽ là khá nhiều, nếu game mà có nhiều nhân vật chuyển động thì chắc cũng hơi oải nhỉ.

Trong bài này mình sẽ hướng dẫn các bạn Cách sử dụng CocoStudio để tạo Animation. Loại Animation tạo ra bởi CocoStudio có ưu điểm là mềm mại hơn, linh hoạt hơn, giải quyết được vấn đề bộ nhớ, quy trình làm cũng không quá khó. Đó chính là Skeleton Animation - Chuyển động dạng khung xương

Nội dung chủ yếu của bài:

+ Giới thiệu về CocoStudio và các chức năng chủ yếu của nó
+ Làm quen với giao diện thiết kế Animation
+ Các bước thiết kế Animation từ việc: dựng khung xương, kéo thả hình ảnh, gắn xương, tạo chuyển động với keyframe trên timeline

OK, thế thôi nhỉ! À, bài này khiến mình hơi phân vân trong việc

+ Hướng dẫn chi tiết bằng hình ảnh
+ Hay quay video + chú thích với từng bước

Thôi, cứ làm cách 1 đã, Video hẹn hôm sau

B1 - Giới thiệu về Cocos Studio, Các chức năng của nó

CocoStudio - cái tên nói lên tất cả. là phần mềm chuyên để thiết kế giao diện, animation, scene, data cho Engine Cocos2d-x. Soft nào mà gắn chữ Studio là bạn biết rồi đấy, chuyên để design.

Bạn hoàn toàn có thể chỉ dùng mỗi Engine Cocos2d-x để build game với từng dòng Code. Tuy nhiên nhờ sự hỗ trợ mạnh mẽ của các extension, plugin hoặc các soft của bên thứ 3 như CocoStudio mà việc thiết kế Game của bạn đơn giản đi rất nhiều. Tất nhiên nó sẽ không làm cho việc thiết kế game đơn giản tới mức chỉ việc ngồi rung đùi, uống cà phê và kéo thả đâu. Nó chỉ làm đơn giản hóa 1 vài công đoạn viết code cho bạn thôi. Tất nhiên đều là những công đoạn quan trọng cả.

Giao diện chính


Những tính năng chủ yếu của CocoStudio

+ Thiết kế Animation
+ Thiết kế Giao diện
+ Thiết kế Màn chơi
+ Thiết kế Data

Bạn có thể download bản mới nhất tại trang chủ của Cocos2d-x. Hiện phiên bản mới nhất là 1.4.x, hỗ trợ Engine 3.1.1

B2 - Làm quen với giao diện thiết kế Animation

Các bạn mở CocoStudio lên, chọn nút đầu tiên : Animation Editor

Giao diện thiết kế của phần Animation như ảnh dưới


Chọn New Project ở bên trái, trọn tên và vị trí lưu Project



Và dưới đây là toàn bộ giao diện WorkSpace của CocoStudio 1.4.x,

Chế độ Pose Mode ( dựng xương, và hình )
















Chế độ Aniatmion : Dựng hoạt hình






Sau đây sẽ là các lệnh, và nút lệnh cơ bản CocoStudio. Thực sự khi mới bắt đầu dùng thì mình cũng thấy hơi khó khăn, do chưa quen nút lệnh, menu chuột phải thì rất ít tác vụ. Nhưng chỉ sau khoảng 1h đồng hồ tìm hiểu là các bạn biết cách sử dụng thành thạo phần Animation này ngay ấy mà. Mình chắc chắn đấy.

* Các menu chính

FILE:


EDIT


VIEW


WINDOW


2 Menu Help, Language thì thôi nhé. Các menu kể trên rất gọn gàng và đơn giản phải không.

* Các Nút lệnh




Các nút màu đỏ là khá quan trọng, thường hay dùng nhé, 2 chế độ Pose Mode và Animation đều dùng chung các nút này.

Quên 1 nút chưa chú thích là nút Selection hình mũi tên và dấu +

* Các khung cửa sổ cơ bản



Cửa sổ Action và Timeline chỉ xuất hiện ở Mode Animation nhé

Cửa sổ ẩn, Bones Relationship ( quan hệ xương ), trông khá giống cây gia phả nhỉ, Xương "cha" nằm phía trên, xương "con" nằm phía dưới, khi di chuyển xương "Cha", xương "con" sẽ di chuyển theo






Cửa sổ Resource Editor ( Sửa tài nguyên ), ở đây bạn có thể chỉnh vị trí điểm neo ( dấu + đỏ ) là điểm gắn vào xương. Còn mấy cái vẽ khung hình ( vẽ ra khung màu xanh ) trong này mình cũng chưa biết ý nghĩa để làm gì nữa.



Xong bước làm quen với Giao diện, Work Space của CocoStudio rồi, chúng ta sẽ đi vào 1 phần rất hay của bài hôm nay, đó là tạo Dựng khung Xương

B3: Thiết kế Animation qua từng bước

1/ Dựng khung xương

Mở khung làm việc, chọn Create Bones ( Alt + K ), vẽ 1 bộ khung xương người như sau, chỉ việc kéo chuột từ điểm này tới điểm kia thôi, khi cần di chuyển xương, nhấn Alt + S, khi cần xoay xương chọn nút "Cử Động Xương". Cần kéo dài, hoặc rút ngắn xương hãy chọn Alt + D. Trông khá giống khung xương người nhỉ



2/ Liên kết khung xương với nhau, mục đích để chúng chuyển động hài hòa, ăn ý với nhau gần giống thật nhất
( Ví dụ: liên kết 2 xương tay, 2 xương chân, liên kết chân với người, đầu với người ) Càng nhiều liên kết thì chuyển động càng uyển chuyển, nhưng cũng khó quản lý hơn đấy

Có 3 cách để liên kết khung xương
C1 : Sử dụng menu chuột phải, chọn Binding Parent ( Alt +P ) : bạn Click chọn 1 Xương - mục đích làm xương con ( nó sáng màu ) sau đó chuột phải chọn Binding Parent ( hoặc nhấn Alt +P ), sau đó chọn 1 xương Cha, 1 thông báo Binding thành không sẽ hiện ra, như sau


C2 : Sử dụng bảng quan hệ Bones RelationShip, với cách này bạn làm như sau: Kéo xương con vào xương cha là xong, mối quan hệ cha con sẽ được thể hiện qua mũi tên, đầu nhọn mũi tên là con, đầu ko có mũi tên là cha
C3 : Sử dụng nút "Gắn xương" để chuyển sang Binding Mode, rồi kéo xương Con vào xương Cha

Mỗi cách có 1 điểm mạnh điểm yếu riêng:

- Cách 1 nhìn được vị trí các xương, có thể xác định được xương nào với xương nào, nhưng ko thể nhìn thấy được mối quan hệ giữa các xương, ko biết xương cha con,
- Cách 2 không nhìn thấy vị trí các xương, vẫn có thể xác định được xương nào = cách click vào layer, nhìn thấy được mối quan hệ cha con.
- Cách 3: nhìn được vị trí các xương, không nhìn thấy mối quan hệ, nhưng có khả năng kéo thả tiện dụng

Hãy phối hợp cả 3 cách để xây dựng khung xương linh hoạt.

* Lưu ý khi tạo liên kết xương:

+ 1 Con không thể có >1 Cha, Khi bạn tạo cha mới cho 1 xương con đã có cha, thì Xương con sẽ nhận Xương Cha sau cùng
+ 1 Cha có thể có nhiều con
+ 1 Xương con, lại có thể là Cha của 1 hoặc nhiều xương con khác

+ Bạn không đảo liên kết Cha - Con, Ông - Cháu với nhau khi còn liên kết Ông - Cha - Con. Tức là bạn ko thể thiết lập cho Cháu lại làm "bố" của Ông, và Con ko thể làm "bố" của Cha. Giống với thực tế đấy chứ. Nhưng khi bạn hủy bỏ liên kết Ông - Cha - Con đi, thì bạn hoàn toàn có thể chọn xương nào làm Cha, xương nào làm Con cũng được, nhưng phải tuân thủ 3 điều trên

Hãy nắm vững 3 quy tắc đó là bạn sẽ dựng được khung xương dễ dàng

Đây là bảng khung xương mình đã dựng ( hình của bạn có thể khác )











OK giờ sang bước tiếp theo là, gắn "da thịt" cho bộ xương này. Có bạn sẽ thắc mắc, lấy "da thịt" này ở đâu? Da thịt ở đây chính là hình ảnh của nhân vật bạn định tạo ra trong game, hình ảnh nhân vật thì bạn phải vẽ rồi. Khi vẽ nhân vật bạn hãy hình dung ra nhân vật sẽ cử động như thế nào, càng nhiều cử động trên cơ thể thì khung xương càng phức tạp. Đơn giản thì chia cử động nhân vật thành các phần: Đầu, thân, tay, chân, bàn chân, bàn tay, vũ khí..... Khi có nhân vật tổng thể bạn phân chia hình ảnh ra các phần Đầu, thân, tay, chân, bàn chân, bàn tay, vũ khí....có thể mỗi phần chia sẽ lẹm của nhau một tý nhưng ko sao đâu, làm thế nào khi ghép lại trông không quá rời rạc là được.

Ở bài này mình lấy sẵn thư viện của CocoStudio để minh họa nhé, tất nhiên chỉ lấy phần tài nguyên hình ảnh thôi.

Nhân tiện về phần Tài nguyên của CocoStudio mình giới thiệu luôn là, nó có thể Import các loại tài nguyên sau đây:

+ Hình ảnh
+ File Json
+ File Plist
+ File Fla?? ( Chưa thử )

Rất phong phú phải không, hình ảnh thì bình thường rồi, nhưng 3 cái sau rất quan trọng nhé, JSon, Plist có thể dùng cho Particle, Physic, tuyệt không?

* Đắp da thịt cho Xương
+ Trước tiên bạn Import Tài nguyên vào bằng lệnh Import Folder / hoặc Import Files ( Chuột phải ở ô Resource ), rồi chọn Tài nguyên ( Image, Json, Plist, Fla)


Tiếp theo là bước quan trọng, đắp da, thịt cho nhân vật, có 2 cách như sau

+ Cách 1: Kéo thả từng ảnh vào WorkSpace : ví dụ ảnh cái đầu ( bạn có thể phóng to thu nhỏ ảnh cho phù hợp khung hình. Sau đó chuột phải vào Ảnh, chọn Binding Bones( Alt + I) rồi tiếp theo chọn cái Xương đầu là xong. Một khi đã gắn Thịt vào Xương, bạn không thể tách ra được, không còn menu chuột phải trên hình ảnh, bạn chỉ có thể xóa Xương đó khỏi khung xương, hoặc Ctr + Z

Để kiểm tra Ảnh đã được gắn vào Xương chưa, chọn nút Xoay Xương, nếu thấy ảnh xoay theo thì là thành công

+ Cách 2: Bạn chọn vào Xương cần gắn, nhìn vào bảng bên phải, ở Tab Layer, xương nào được chọn sẽ sáng lên, tiếp đó bạn Click vào Tab Properties. Tab này chứa các thông số của Xương như: Tên, chiều dài, góc quay, tọa độ, GRAPHIC. bạn có thể dùng các thông số này để hiệu chỉnh Xương khi chưa gắn Ảnh, hoặc hiệu chỉnh cả Ảnh khi được gắn vào Xương. ( Nếu không nhìn thấy 2 Tab này hãy vào menu Window/Reset Window Layout)



Bạn để ý 1 ô quan trọng, GRAPHIC, hãy kéo hình ảnh vào đây, nó sẽ gắn luôn với Xương được chọn, nhưng hình ảnh sẽ không đúng tỷ lệ mong muốn, và thường bị quay đi 1 góc. Hãy chỉnh lại tỷ lệ ảnh, và góc quay với Lưu ý bên dưới.

* Lưu ý đặc biệt quan trọng

2 Cách đều có cái hay riêng:

Cách 1: Kéo thả ảnh, chỉnh ảnh - xoay ảnh thoải mái rồi mới gắn xương. Tuy nhiên có thể gắn nhầm xương, hoặc chọn nhầm ảnh ( do nhiều ảnh ) để gắn.

Cách 2: Khó để nhầm ảnh hoặc Xương, gắn phát dính luôn,

Và cái dở:

Cách 1: Bạn không thể tách xương khỏi ảnh, tuy nhiên vẫn có thể dùng Ctrl + Z để trở lại bước chưa gắn xương

Cách 2: Bạn cũng ko thể tách xương khỏi ảnh, và Đặc Biệt, bạn ko thể dùng Ctrl + Z để trở lại bước trước khi gắn Xương, nghĩa là bạn chỉ có thể mở lại Project ( nếu chưa lưu bước gắn xương mà thôi ), hoặc chỉ có thể xóa Xương và Ảnh khỏi khung xương. Sẽ rắc rối nếu Xương đó là xương Cha của nhiều xương, lại phải gắn khung xương lại rồi.

Và có 1 điều khó chịu khi làm theo cách 2  ( thậm chí là cách 1) . Khi gắn xương theo cách 2, ảnh sẽ bị quay 1 góc, bạn phải làm như sau:
- Trước tiên Bạn phải chỉnh tỷ lệ hình ảnh = 4 nút vuông ở 4 góc ảnh, nhớ giữ SHIFT
- Sau đó bạn mới quay ảnh = 1 nút vuông nằm trên 1 Cạnh của ảnh
- Nếu ko làm theo thứ tự này, tức bạn xoay ảnh trước, rồi mới chỉnh tỷ lệ, thì sẽ cực khó chịu vì phương chiều sẽ bị đảo lộn rất ức chế. Bạn thử đi là biết.

Vậy mình khuyên các bạn dùng cách 1 đi, bớt khó chịu hơn cách 2

Và đây là khung xương đã gắn da thịt của mình ( Mình lấy tạm Project của CocoStudio nhé )






Mình dừng bài học ở đây nhé, cũng khá dài rồi. Phần Animation mình hẹn ở Phần 2 nha. Trong bài này chúng ta đã học được:

+ Các chức năng chính của CocoStudio
+ Làm quen giao diện WorkSpace
+ Dựng khung xương, gắn xương với nhau
+ Đắp "da thịt" cho bộ xương

Chào và hẹn gặp lại các bạn ở bài sau!

Bài 24 - Giới thiệu CocoStudio - Công cụ tạo Animation cực cool (Part 2)

Thứ Tư, 18 tháng 6, 2014

SEOVL

....reng...reng...en.... 
- Alo anh chuyên SEO đúng không ạ
Đúng rồi
- Em muốn SEO
OK
- Nhưng lĩnh vực của em khá cạnh tranh, bên anh làm được không ạ ?
Vấn đề là giá bao nhiêu
- Tiền bạc với em không thành vấn đề, vấn đề là nó phải lên
- Lĩnh vực của cậu là gì
- Em muốn làm về tin, mấy từ: tin, tin tức, tin mới... khoảng bao nhiêu anh ?
....
200 triệu 1 từ
- Khoảng bao lâu thì lên ạ ?
Chừng một năm
- 1 năm cơ ạ
Cậu cạnh tranh với vietnamnet, vnexpress thì nó khó, giá đó may ra mới làm được
- Lên được trang mấy anh ?
Trang 1, từ 5 - 10
- Còn top 1 thì bao nhiêu anh
Chừng 3 - 4 tỉ gì đó
- Gay nhỉ
Gay gì, người ta đầu tư hệ thống 300 tỉ...
- Nghe cũng có lý nhỉ
Uh!  Vấn đề là nó chẳng hiệu quả gì cả, chẳng ai đi serch từ "tin tức" để đọc tin cả, cậu có như thế không?
- Thế làm thế nào ạ
Sẽ chẳng ai nói với cậu phải làm gì và thế nào đâu, tốt nhất cậu thuê một bên uy tín làm tư vấn
....
- Em đang thuê code, khi nào xong em sẽ gọi lại
Ok
SEO nội dung và SEO copywriting VL
@ Cuộc điện thoại này mới xảy ra cách đây 5 phút, và nhờ nó cái blog bỏ hoang cả tháng này mới có cái để viết. Và khỏi chờ cũng biết cái kết của câu chuyện này đến đâu. 
Giờ SEO điên đảo quá, mình đã hâm tính lại gặp một tên hâm vl như thế này. 
Sặc, chết mất.

Thứ Ba, 17 tháng 6, 2014

Cài đặt: Hướng dẫn cài đặt Microsoft SQL Server 2005 (bằng hình ảnh)

Bước 1. Đưa đĩa CD cài đặt vào ổ đĩa, chương trình sẽ tự động hiển thị giao diện như hình:

Bước 2. Lựa chọn Server components, tools, Books Online and Samples.

Bước 3. Đánh dấu vào lựa chọn I accept the licensing terms and conditions để đồng ý với điều khoản giấy phép sử dụng của Microsoft trước khi tiến hành cài đặt. Sau đó chọn OK.

Bước 4. Click nút Install để cài đặt các thành phần cập nhật cần thiết trước khi cài SQL Server.

Bước 5. Sau khi cài đặt thành công nhấn nút Next.

Bước 6. Quá trình cài đặt sẽ kiểm tra cấu hình của hệ thống (System Configuration Check).

Bước 7. Màn hình Welcome to the Microsoft SQL Server Installation Wizard xuất hiện. Nhấn Next để sang bước tiếp theo.

Bước 8. Quá trình kiểm tra cấu hình hệ thống bắt đầu chạy. Trong bước này, màn hình sẽ hiển thị các cảnh báo hoặc lỗi mà bạn sẽ gặp phải. Nếu cột status có thông báo successfull như hình dưới thì bạn nhấn Next để tiếp tục. Những warning (cảnh báo) sẽ không quá quan trọng, và bạn có thể bổ sung trong quá trình cài đặt.

Bước 9. Điền đầy đủ thông đăng ký trong mục Name, Company, Product Key. Sau đó nhấn Next.

Bước 10. Đánh dấu vào các mục chọn SQL Server Database Services, Reporting Services, Workstation components, Books Online and development tools để cài đặt các dịch vụ cần thiết. Sau đó nhấn Next.

Bước 11. Chọn Named instance và nhập tên thể hiện vào đó, ở đây chọn infinity (chỗ này chọn tùy ý). Sau đó nhấn Next.

Bước 12. Chọn như hình dưới, đánh dấu vào các mục chọn. Sau đó nhấn Next.

Bước 13. Có 2 lựa chọn chế độ xác thực. Windows Authentication Mode - chế độ xác thực dựa vào xác thực của Windows và Mixed Mode - chế độ xác thực dựa vào xác thực của Windows và SQL Server, nếu lựa chọn chế độ này, ta có tài khoản mặc định là sa, bạn nhập mật khẩu và xác nhận mật khẩu bên dưới. Ở đây, chúng ta lựa chọn Windows Authentication để cho quá trình thực hành được đơn giản. Sau đó nhấn Next.

Bước 14. Chọn SQL Collations như hình bên dưới. Sau đó nhấn Next.

Bước 15. Chọn Install the default configuration để chọn chế độ cài đặt mặc định. Sau đó nhấn Next.

Bước 16. Nhấn Install để bắt đầu quá trình cài đặt


Thứ Hai, 16 tháng 6, 2014

Code C/C++: Tính định thức của ma trận

Ý tưởng thuật toán: ta tiến hành phân rã ma trận A=L.U.
Ta có: Det(A)=Det(L)*Det(U) mà Det(L) = 1 nên Det(A) = Det(U)
Cài đặt thuật toán:
#include <conio.h>
#include <iostream>
#define max 100
using namespace std;
/* Nhập ma trận */
void Nhap(float A[max][max],int n) {
for(int i = 0; i<n; i++)
for(int j = 0; j<n; j++) {
cout<<"a["<<i<<"]["<<j<<"] = ";
cin>>A[i][j];
}
}
/* Xuất ma trận */
void XuatMaTran(float A[max][max], int n){
cout<<"\n";
for(int i=0 ; i<n; i++){
cout<<endl;
for(int j=0 ; j<n; j++)
cout<<A[i][j]<<"\t";
}
}
/* Phan ra A = LU */
void PhanRaLU(float A[max][max], float L[max][max], float U[max][max], int n) {
for(int k = 0; k<n;k++) {
U[k][k] = A[k][k];
L[k][k] = 1;
for(int i=k+1; i<n; i++) {
L[i][k] = A[i][k]/U[k][k];
U[k][i] = A[k][i];
U[i][k] = 0;
L[k][i] = 0;
}
for(int i = k+1; i<n; i++)
for(int j = k+1; j<n; j++)
A[i][j] = A[i][j]-L[i][k]*U[k][j];
}
}
// Định thức ma trận tam giác
double DinhThucMaTranTamGiac(float A[max][max], int n){ 
double temp = 1;
for(int i = 0; i<n; i++)
temp*=A[i][i];
return temp;
}
/* Chương trình chính */
int main() {
int n;
float A[max][max],L[max][max],U[max][max];
cout<<"Nhap n = ";  cin>>n;
cout<<"Nhap ma tran A\n";
Nhap(A,n);
cout<<"Ma tran A vua nhap";
XuatMaTran(A,n);
PhanRaLU(A,L,U,n);
cout<<"\nMa tran L";
XuatMaTran(L,n);
cout<<"\nMa tran U";
XuatMaTran(U,n);
cout<<"\nDet(A) = Det(L)*Det(U) = "<<DinhThucMaTranTamGiac(U,n);
getch();
return 0;

}
Kết quả chạy chương trình:
Tag: C, C++, Hệ phương trình tuyến tính, Định thức của ma trận, det, matrix

Code C/C++: Giải hệ phương trình tuyến tính dựa vào phân rã LU

Ý tưởng thuật toán: cho hệ phương trình tuyến tính tổng quát A.X=B. Ta tiến hành phân rã A=L.U. Trong đó, L là ma trận tam giác dưới và U là ma trận tam giác trên.
Khi đó,
Cài đặt chương trình:
#include <conio.h>
#include <iostream>
#define max 100
using namespace std;
/* Nhập ma trận hệ số */
void Nhap(float A[max][max],int n) {
for(int i = 0; i<n; i++)
for(int j = 0; j<n; j++){
cout<<"a["<<i<<"]["<<j<<"] = ";
cin>>A[i][j];
}
}
/* Nhập ma trận hệ số tự do */
void Nhap(float B[max],int n) {
for(int i = 0; i<n; i++) {
cout<<"b["<<i<<"] = ";
cin>>B[i];
}
}
/* Xuất ma trận hệ số tự do */
void Xuat(float B[max],int n) {
cout<<"(";
for(int i = 0; i<n-1; i++)
cout<<B[i]<<",";
cout<<B[n-1]<<")";
}
/* Xuất ma trận */
void Xuat(float A[max][max], int n) {
cout<<"\n";
for(int i=0 ; i<n; i++){
cout<<endl;
for(int j=0 ; j<n; j++)
cout<<A[i][j]<<"\t";
}
}
/* Xuất nghiệm */
void XuatNghiem(float X[], int n, char * s)  {
cout<<"\nNghiem cua he PTTT";
for(int i=0; i<n; i++)
cout<<s<<i+1<<"="<<X[i];
}
char HeTamGiacDuoi (float A[max][max], float X[max], float B[max], int n ) {
for(int i = 0; i<n; i++) {
if (A[i][i]!=0) {
if (i==0)
X[i] = B[i]/A[i][i];
else {
X[i] = B[i];
for(int j=0; j<i; j++)
X[i]=X[i]-A[i][j]*X[j];
X[i] = X[i]/A[i][i];
}
} else
return 0;
}
return 1;
}
char HeTamGiacTren (float A[max][max], float X[max], float B[max], int n ) {
for(int i = n-1; i>=0; i--) {
if (A[i][i]!=0) {
if (i==n-1)
X[i] = B[i]/A[i][i];
else {
X[i] = B[i];
for(int j=i+1; j<n; j++)
X[i]=X[i]-A[i][j]*X[j];
X[i] = X[i]/A[i][i];
}
} else
return 0;
}
return 1;
}
void PhanRaLU(float A[max][max], float L[max][max], float U[max][max], int n){
for(int k =0; k<n; k++) {
U[k][k] = A[k][k];
L[k][k] = 1;
for(int i=k+1; i<n; i++) { 
L[i][k] = A[i][k]/U[k][k];
U[k][i] = A[k][i];
U[i][k] = 0;
L[k][i] = 0;
}
for(int i = k+1; i<n; i++)
for(int j = k+1; j<n; j++)
A[i][j] = A[i][j]-L[i][k]*U[k][j];
}
}
/* Giải hệ phương trình tổng quát LUX=B*/
void GiaiHePTTT(float A[max][max], float X[max], float B[max], int n) {
float L[max][max],U[max][max], Y[max];
cout<<"Phan ra A = L.U\n";
PhanRaLU(A,L,U,n);
cout<<"Ma tran L";
Xuat(L,n);
cout<<"\nMa tran U";
Xuat(U,n);
cout<<"\nGiai LY = B. Nghiem Y";
if(HeTamGiacDuoi(L,Y,B,n)) {
XuatNghiem(Y,n,"\ny");
cout<<"\nGiai UX = Y. Nghiem X";
if(HeTamGiacTren(U,X,Y,n))
XuatNghiem(X,n,"\nx");
else
cout<<"\nHe pttt k co nghiem duy nhat";
} else
cout<<"\nHe pttt k co nghiem duy nhat";
}
int main() {
int n;
float A[max][max],B[max], X[max];
cout<<"Nhap so he phuong trinh n = "; cin>>n;
cout<<"Nhap ma tran he so A\n";
Nhap(A,n);
cout<<"Nhap ma tran he so tu do B\n";
Nhap(B,n);
GiaiHePTTT(A,X,B,n);
getch();
return 0;

} 
Kết quả chạy chương trình:

Code C/C++: Thuật toán phân rã ma trận A = LU

Quá trình chuyển hoá ma trận  A ban đầu thành tích hai ma trận tam giác L.U dựa vào phép khử Gauss được thực hiện bằng các phép nhân ma trận. Thuật toán này được gọi là thuật toán Crout. Quá trình Crout bao gồm nhiều bước hồi quy. Nếu ma trận  A có cấp  n x n, ta cần n-1 bước. Thuật toán được thể hiện cụ thể như sau:
Thông qua  n-1 bước hồi quy ta được  A=L.U. Với L là ma trận tam giác dưới và U là ma trận tam giác trên.
Cài đặt chương trình:
#include <conio.h>
#include <iostream>
#define max 100
using namespace std;
void Nhap(float A[max][max],int n) {
for(int i = 0; i<n; i++)
for(int j = 0; j<n; j++) {
cout<<"a["<<i<<"]["<<j<<"] = ";
cin>>A[i][j]; 
}
}
void XuatMaTran(float A[max][max], int n) {
cout<<"\n";
for(int i=0 ; i<n; i++){
cout<<endl;
for(int j=0 ; j<n; j++)
cout<<A[i][j]<<"\t";
}
}
/* Phan ra A = LU */
void PhanRaLU(float A[max][max], float L[max][max], float U[max][max], int n) {
for(int k =0; k<n; k++) {
U[k][k] = A[k][k];
L[k][k] = 1;
for(int i=k+1; i<n; i++) {
L[i][k] = A[i][k]/U[k][k];
U[k][i] = A[k][i];
U[i][k] = 0;
L[k][i] = 0;
}
for(int i = k+1; i<n; i++)
for(int j = k+1; j<n; j++)
A[i][j] = A[i][j]-L[i][k]*U[k][j];
}
}
int main(){
int n;
float A[max][max],L[max][max],U[max][max];
cout<<"Nhap n = ";  cin>>n;
cout<<"Nhap ma tran A\n";
Nhap(A,n);
cout<<"Ma tran A vua nhap";
XuatMaTran(A,n);
PhanRaLU(A,L,U,n);
cout<<"\nMa tran L";
XuatMaTran(L,n);
cout<<"\nMa tran U";
XuatMaTran(U,n);
getch();
return 0;
} 
Kết quả chạy chương trình:
Tag: C, C++, ma trận, A=LU, A=L*U, phân rã ma trận