Thứ Bảy, 6 tháng 12, 2008

PHÉP TOÁN XOR

Hôm nay ngẫu hứng tự nhiên thấy phép XOR hơi hay hay, nên viết lên mọi người tham khảo nhé.

Còn gọi là hàm không tương đương, Hàm cộng modul-2, Hay là phép Cộng có loại trừ. 

  1. Phương trình : Phương trình hàm XOR 2 biến được định nghĩa như sau :     

    F(AB) = AB + AB = A Å B

F = 1 khi tất cả các biến đầu vào có giá trị khác nhau. 

F = 0 khi các biến vào có giá trị giống nhau.


Bảng chân lý :  bảng chân lý hàm XOR có dạng như sau:
ABÅ B 
000
011
101
110

Trong phép hoán vị giá trị của 2 biến a,b dùng thuật toán xor đó.

Thứ Ba, 2 tháng 12, 2008

100 Greatest Science Discoveries of All Time

Tuy chưa đọc cuốn này nhưng nhìn sơ qua, mình có cảm giác sẽ đem lại nhiều điều thích thú cho người đọc. Nếu không tin, hay download và đọc đi nhé.
Throughout history, science has changed lives and dramatically altered the way in which the universe is perceived. Focusing on the 100 most significant scientific events of all time--from Archimedes' discovery of the two fundamental principles underlying physics and engineering (levers and buoyancy) in 260 B.C.E. to human anatomy, Jupiter's moons, electrons, black holes, the human genome, and more--storyteller Kendall Haven has created a ready reference for those seeking information on science discoveries. Brimming with fascinating and fun facts about 100 scientific breakthroughs, this collection presents the real stories behind the history of science, at the same time offering a panoramic overview of the history of science and an introduction to some of the most important scientists in history. Grades 6 and up.

About the Author
KENDALL HAVEN is a nationally recognized master storyteller and the author of numerous books, including Marvels of Math, Write Right!, and Close Encounters with Deadly Dangers. A former research scientist, he is based in Fulton, California.
Download here

Sams Teach Yourself C++ in One Hour a Day (6th Edition)

Theo mình học C/C++ theo kiểu mì ăn liền tuy không tốt nhưng trong các sách mình đã đọc, mình chỉ thấy cuốn này hay hơn các cuốn đã được xuất bản ở Việt Nam.
In just one hour a day, you’ll have all the skills you need to begin programming in C++. With this complete tutorial, you’ll quickly master the basics and then move on to more advanced features and concepts:
Master the fundamentals of C++ and object-oriented programming
Learn some of the more advanced features of C++
Learn the Standard Template Library and the containers and algorithms used in most real-world C++ applications
Learn how to build effective programs in C++ with hands-on exercises
Get expert tips on implementing C++ in the corporate environment

Learn on your own time, at your own pace
No previous programming experience required
Learn C++ and object-oriented design, programming, and analysis
Write fast and powerful C++ programs, compile the source code, and create executable files
Understand the latest ANSI standard
Use the Standard Template Library’s algorithms and containers to write feature-rich yet stable C++ applications
Develop sophisticated programming techniques with functions, arrays, variables, and smart pointers
Learn to expand your program’s power with inheritance and polymorphism
Master the features of C++ by learning from programming experts
Works with all ANSI C++ compilers
Jesse Liberty is the author of numerous books on software development, including best-selling titles on C++ and .NET. He is the president of Liberty Associates, Inc., where he provides custom programming, consulting, and training.

Siddhartha Rao, Microsoft MVP for Visual C++, has experience in programming driver and application software using C++. He is an expert in the Windows programming arena and works for a German software giant. He also moderates CodeGuru.com, a vibrant online programming community.

Bradley Jones, Microsoft MVP for Visual C++, runs a number of software development sites including Developer.com, CodeGuru.com, DevX, VBForums, Gamelan, and other JupiterWeb-owned sites.

Category: Programming
Covers: C++
User Level: Beginning–Intermediate

Register your book at informit.com/register for access to source code, example files, updates, and corrections as they become available.
Download here

Thứ Ba, 28 tháng 10, 2008

EVN Telecom - nạn nhân mới của VNPT

Hôm nay cũng thật là tức, tại sao mạng điện thoại di động Viettel không gởi tin nhắn cho EVN telecom và mình lên google tìm kiếm, cuối cùng cũng đã ra, do các mạng di động cạnh tranh chơi không đẹp với nhau:
Khi những quy định về kết nối do Bộ Bưu chính Viễn thông ban hành vẫn còn nguyên mùi giấy thì chuyện tranh chấp lại tiếp tục xảy ra giữa VNPT và doanh nghiệp mới nhập cuộc EVN Telecom.
Ông "alô" lại tranh chấp chuyện kết nối.
Ảnh: Tuổi Trẻ.
Chính thức cung cấp từ cuối năm ngoái, dịch vụ điện thoại cố định không dây (E-com) được xem là thế mạnh của EVN Telecom. Nhà cung cấp này có 3 dịch vụ điện thoại gồm E-com, E-Phone (điện thoại di động nội tỉnh) và E-Mobile (điện thoại di động công nghệ CDMA) với trên 100.000 thuê bao. Trong đó, số thuê bao của riêng E-com đã chiếm xấp xỉ 100.000.


E-com được coi là thế mạnh bởi EVN Telecom xác định hai dịch vụ còn lại không thể địch được với các mạng di động VinaPhone, MobiFone, Viettel Mobile. Trong khi đó, cùng là điện thoại cố định nhưng E-com vượt trội hơn các dịch vụ của VNPT và Viettel ở ưu điểm dễ lắp đặt do không phải kéo dây, có thể phát triển tới các vùng sâu, vùng xa. Đặc biệt, khi kết nối với máy tính, các máy điện thoại sử dụng dịch vụ E-com sẽ hoạt động như một modem, cho phép kết nối Internet tốc độ cao, giá cước rẻ.
Với những tính năng vượt trội này, EVN Telecom hi vọng sẽ phát triển mạnh hơn nữa, nếu người dùng dịch vụ E-com có thể gửi và nhận được tin nhắn với các mạng di động của VNPT. Tuy nhiên, sau gần một năm triển khai, E-com mới chỉ được nhắn tin trong nội mạng các thuê của chính EVN Telecom chứ chưa nối được sang hai mạng di động có thuê bao lớn nhất trên thị trường của VNPT là VinaPhone và MobiFone. Thật ra ngay từ khi triển khai dịch vụ, EVN Telecom đã tiến hành đàm phán kết nối tin nhắn với VNPT nhưng ông “độc quyền” vẫn cứ lần lữa không chịu mở cổng cho EVN Telecom.
Hiện nay, trong số ba dịch vụ của EVN Telecom, chỉ duy nhất mạng điện thoại di động 096 - E-Mobile đã thông tin nhắn với các mạng của VNPT. Sở dĩ "ông lớn" chịu mở cổng cho dịch vụ này bởi trước họ đã kết nối cho S-Fone nên không có cớ gì để gây khó dễ cho dịch vụ di động của EVN Telecom.
Không cho khách hàng hưởng quyền miễn cước
Ngày càng nhiều người sử dụng điện thoại di động.


Ảnh: Hoàng Hà.
Không chỉ gây khó dễ trong kết nối đối với dịch vụ E-com, một đại diện của EVN Telecom cho biết, VNPT cũng đang gây khó dễ trong việc kết nối từ thuê bao của VNPT vào số chăm sóc khách hàng của nhà cung cấp này.
Trong khi đó, theo quy định chung của quốc tế, tất cả thuê bao điện thoại đều được gọi miễn phí vào số chăm sóc khách hàng (bắt đầu bằng mã số 1800) của bất kỳ nhà cung cấp nào. Quy định này cho phép khách hàng sử dụng dịch vụ của VNPT muốn sử dụng thêm dịch vụ của EVN Telecom hoặc đang sử dụng đồng thời dịch vụ của hai nhà cung cấp đều có thể gọi miễn phí từ thuê bao của VNPT vào số chăm sóc khách hàng của EVN Telecom để hỏi thông tin.
Trên thực tế, VNPT lại không mở kết nối cho các thuê bao của mình gọi vào số chăm sóc khách hàng của EVN Telecom. VNPT đòi EVN Telecom phải trả 600 đồng/phút đối với các cuộc gọi vào số chăm sóc khách hàng của EVN Telecom. Thế nhưng, ngay cả khi EVN Telecom bấm bụng chấp nhận trả số tiền này thì VNPT vẫn khất lần chưa chịu mở kết nối.
Hầu hết doanh nghiệp mới đều cảm thấy ngao ngán khi đàm phán kết nối với mạng viễn thông VNPT. S-Fone từng phải trầy trật mới kết nối được dịch vụ nhắn tin giữa mạng di động S-Fone với mạng di động VinaPhone và MobiFone của VNPT.
Viettel từng điên đầu khi VNPT không chịu đáp ứng nhu cầu kết nối cho doanh nghiệp này khiến Bộ Quốc phòng (cơ quan chủ quản của Viettel) phải “kêu cứu” lên Thủ tướng.
Cực chẳng đã, EVN Telecom phải mở một đầu số chăm sóc khách hàng khác (2.232323) không theo mã số chuẩn quốc tế. Điều đáng nói là khi gọi vào đầu số này, khách hàng của VNPT sẽ phải trả tiền như một cuộc gọi thông thường. Như thế, VNPT tận thu của khách hàng từ cả những cuộc gọi lẽ ra được miễn cước.
Theo một quan chức của EVN Telecom, lý do mà VNPT đưa ra để không mở kết nối cho các dịch vụ của EVN Telecom là do nhà cung cấp này đang trong quá trình thay đổi từ mô hình Tổng công ty sang mô hình tập đoàn. Quan chức này cho rằng, nếu VNPT thật sự thiện chí thì việc thay đổi mô hình hoàn toàn không ảnh hưởng tới việc đàm phán kết nối giữa hai bên.
Trong khi đó, ông Bùi Quốc Việt, Giám đốc Trung tâm Thông tin bưu điện, người phát ngôn của VNPT, lại cho rằng thực tế việc kết nối giữa các mạng viễn thông không đơn giản và cần phải có thời gian để thực hiện, đặc biệt trong trường hợp thiết bị giữa các mạng không đồng bộ với nhau.
Đến thời điểm này nay, mặc dù chưa có tín hiệu nào cho thấy VNPT sẵn sàng mở kết nối cho EVN Telecom nhưng nhà cung cấp dịch vụ này vẫn chưa muốn hành động như Viettel đã làm là kêu lên cơ quan chủ quản để “cầu cứu” Thủ tướng.
EVN Telecom vẫn kiên nhẫn gửi các công văn sang VNPT để thúc, đồng thời thông báo cho tổ chỉ đạo kết nối của Bộ Bưu chính Viễn thông biết. Trong khi VNPT không có thông báo chính thức nào thì tổ kết nối dường như cũng cho đây là chuyện cỏn con giữa các doanh nghiệp với nhau nên chưa có động thái can thiệp. Cuối cùng, những chiêu cạnh tranh không lành mạnh giữa doanh nghiệp lớn với doanh nghiệp bé sẽ lại khiến người tiêu dùng phải chịu thiệt thòi.

(Theo VnExpress)

Thứ Sáu, 17 tháng 10, 2008

Chuyện cười IT

Một bác sĩ, một kỹ sư xây dựng và một chuyên viên IT cùng đến trước cổng thiên đường.
Vị bác sĩ lên tiếng trước:
- Cả cuộc đời, tôi đã cứu chữa không biết bao nhiêu người. Xin hãy cho tôi vào thiên đường. Thánh Peter bảo:
- Nhưng ông chưa bao giờ chữa cho những người tàn tật, nghèo khổ. Ông sẽ phải xuống địa ngục.
Đến lượt anh kỹ sư xây dựng:
- Cuộc đời tôi chỉ lo làm đẹp đường phố…
- Nhưng anh bỏ mặc người vô gia cư và làm ô nhiễm môi trường nên anh cũng phải xuống địa ngục.
Chuyên viên IT rụt rè tiến lên:
- Thưa ngài, tôi là một lập trình viên…
- Thôi được rồi, cả đời anh đã ở trong địa ngục, xin mời anh vào thiên đường.

Bài toán tháp Hà Nội

Nguồn từ wikipedia.org

Bài toán tháp Hà Nội (tiếng Anh gọi là Tower of Hanoi hay Towers of Hanoi) xuất phát từ trò chơi đố Tháp Hà Nội.

Một bộ mẫu của Tháp Hà Nội

Mục đích của bài toán là thực hiện được yêu cầu của trò chơi. Dạng bài toán thông dụng nhất là: "Người chơi được cho ba cái cọc và một số đĩa có kích thước khác nhau có thể cho vào các cọc này. Ban đầu sắp xếp các đĩa theo trật tự kích thước vào một cọc sao cho đĩa nhỏ nhất nằm trên cùng, tức là tạo ra một dạng hình nón. Người chơi phải di chuyển toàn bộ số đĩa sang một cọc khác, tuân theo các quy tắc sau:

  • Một lần chỉ được di chuyển một đĩa
  • Một đĩa chỉ có thể được đặt lên một đĩa lớn hơn (không nhất thiết hai đĩa này phải có kích thước liền kề, tức là đĩa nhỏ nhất có thể nằm trên đĩa lớn nhất)".

Bài toán này có lời giải chính xác. Tuy nhiên các mở rộng cho trường hợp có nhiều hơn ba cọc cho đến nay vẫn chưa được giải cặn kẽ.


Cách giải:
Đa số các trò chơi dạng này có 8 đĩa. Đối với người mới chơi thì có vẻ khó nhưng thật ra thuật giải của nó hết sức đơn giản:

Thuật giải đệ quy

đặt tên các cọc là A, B, C -- những tên này có thể chuyển ở các bước khác nhau

gọi n là tổng số đĩa

đánh số đĩa từ 1 (nhỏ nhất, trên cùng) đến n (lớn nhất, dưới cùng)

Để chuyển n đĩa từ cọc A sang cọc B thì cần:

  1. chuyển n-1 đĩa từ A sang C. Chỉ còn lại đĩa #n trên cọc A
  2. chuyển đĩa #n từ A sang B
  3. chuyển n-1 đĩa từ C sang B cho chúng nằm trên đĩa #n

Phương pháp trên được gọi là thuật giải đệ quy: để tiến hành bước 1 và 3, áp dụng lại thuật giải cho n-1. Toàn bộ quá trình là một số hữu hạn các bước, vì đến một lúc nào đó thuật giải sẽ áp dụng cho n = 1. Bước này chỉ đơn giản là chuyển một đĩa duy nhất từ cọc A sang cọc C.


VAR n: Integer; Procedure chuyen(sodia: Integer; CotNguon: Char; CotDich: Char; CotTG: Char);
Begin
If sodia>0 then begin
chuyen(sodia-1, CotNguon, CotTG, CotDich);
Writeln(CotNguon,'->',CotDich); { Dia lon nhat hien tai }
chuyen(sodia-1, CotTG, CotDich, CotNguon)
End;
End;
BEGIN
Write('Hay nhap so dia: '); Readln(n);
chuyen(n,'A','B','C');
Readln;
END.

Giải thích thuật giải

(Trên) Lời giải cho 3 đĩa. (Dưới) Lời giải cho 4 đĩa.
(Trên) Lời giải cho 3 đĩa. (Dưới) Lời giải cho 4 đĩa.
Tái tạo lại trang trong phần này để xem sự tương quan giữa hai lời giải.
Tái tạo lại trang trong phần này để xem sự tương quan giữa hai lời giải.

Sau đây là dạng dễ xem hơn của thuật giải này:

  1. chuyển đĩa 1 sang cọc B
  2. chuyển đĩa 2 sang cọc C
  3. chuyển đĩa 1 từ B sang C sao cho nó nằm lên 2

Vậy ta hiện có 2 đĩa đã nằm trên cọc C, cọc B hiện thời trống

  1. chuyển đĩa 3 sang cọc B
  2. lặp lại 3 bước trên để chuyển 1 & 2 cho nằm lên 3

Mỗi lần dựng xong tháp từ đĩa i đến 1, chuyển đĩa i+1 từ cọc A là cọc xuất phát, rồi lại di chuyển tháp đã dựng lên đĩa "i+1".


Giải thuật bằng biểu diễn nhị phân

Các vị trí đĩa có thể xác định được trực tiếp từ biểu diễn nhị phân của số thứ tự di chuyển (cơ số 2 với một chữ số cho mỗi đĩa) trong đó các dãy 1 và các dãy 0 tượng trưng cho các dãy các đĩa liền nhau trên cùng cọc, và mỗi khi chữ số có thay đổi thì đĩa kế tiếp sẽ dời sang trái hay phải một cọc (hay chuyển sang cọc ngoài cùng phía đối diện). Chữ số ở đầu đại diện cho đĩa lớn nhất và nếu là chữ số 0 thì có nghĩa là đĩa lớn nhất không dời khỏi cọc xuất phát và ngược lại. Đặt các chữ số 1 và 0 luân phiên bên dưới các chữ số của một bước chuyển cho phép biết được di chuyển theo một chiều khi nó hợp với chữ số của bước chuyển tại nơi chữ số thay đổi và theo chiều kia khi nó không hợp. Do đó bước chuyển 00000000... có nghĩa là đặt 8 đĩa lớn nhất lên cọc ban đầu, bước chuyển 11111111... có nghĩa là đặt chúng lên cọc cuối cùng, và bước chuyển 11011000... có hai đĩa lớn nhất trên cọc đích, đĩa tiếp theo trên cọc xuất phát, hai đĩa tiếp theo ở cọc trung gian, và ba đĩa tiếp theo nữa trên cọc xuất phát, bất kể có thêm bao nhiêu chữ số đại diện các đĩa nhỏ hơn. Ta có thể dễ dàng tính được các vị trí của các đĩa trong một bộ tám mươi đĩa sau một số các bước tiến, nếu giới hạn đủ lớn để chứa nó. Việc dùng phương pháp đệ quy cho trường hợp tám mươi đĩa như thế này có thể không thực tế.

Trường hợp 4 cộc trở lên

Mặc dù thuật giải tương đối đơn giản, bài toán với n đĩa sẽ cần ít nhất 2n-1 lần di chuyển. Tuy nhiên với số lượng đĩa nhiều hơn 3 thì vẫn chưa biết được sẽ cần ít nhất bao nhiêu lần di chuyển để giải bài toán. Do vậy việc áp dụng bước tiến dãy (tiếng Anh sequential advancement) để xác định vị trí của một số lượng lớn các đĩa trên ba cọc sau một số lớn tuỳ ý các bước tiến là không thực tế. Lời giải tối ưu cho bài toán Tháp Hà Nội với bốn cọc hay nhiều hơn vẫn còn là một bài toán mở. Đây là một ví dụ tiêu biểu cho thấy một bài toán đơn giản, có thể giải được vẫn có thể trở thành khó hơn rất nhiều bằng cách hơi nới lỏng một số ràng buộc của nó.

Mặc dù không biết được chính xác cần bao nhiêu lần di chuyển, có thể có một vài kết quả tiệm cận. Có một "lời giải được coi như tối ưu" có thể áp dụng một cách đệ quy để tìm một lời giải–xem giải thích cũng như một vài biến thể của bài toán bốn cọc trong bài khảo sát của Paul Stockmeyer (tiếng Anh).

Mặc dù với số đĩa nhỏ thử nghiệm trên máy tính thì "lời giải được coi như tối ưu" này là thực sự tối ưu, nhưng nó vẫn chưa có một chứng minh tổng quát để coi là thực sự tối ưu. Tuy nhiên, những kết quả nghiên cứu trong năm 2004 (tiếng Anh) đã cho thấy lời giải được coi như tối ưu phải nằm trong cùng độ lớn với lời giải tối ưu.

Thứ Ba, 7 tháng 10, 2008

Em học lập trình Pascal

Đĩa CD này rất hay, gồm rất nhiều bài toán từ cơ bản đến nâng cao, nhưng tiếc rằng đĩa này mình đã làm trầy, không đọc được.


Một trong những mục tiêu chính của chương trình Tin học cho học sinh bậc Phổ thông là cần nắm vững các khái niệm đơn giản nhất liên quan đến lập trình và rèn luyện kỹ năng lập trình trên một ngôn ngữ bậc cao cụ thể nào đó.

Đã từ lâu, Pascal trở thành ngôn ngữ chính được giảng dạy trong nhà trường phổ thông và đại học tại Việt nam. Vì vậy nhu cầu được học một cách bài bản và qui củ ngôn ngữ này là rất lớn đặc biệt trong các Nhà trường phổ thông. Mục tiêu duy nhất của chương trình học lập trình Pascal của chúng tôi là muốn đưa ra một chương trình tổng thể học và dạy lập trình Pascal cho các Nhà trường và các em học sinh.

Chương trình được gọi là tổng thể vì chúng được thiết kế nhằm vào tất cả các đối tượng học sinh vàthông suốt từ Phổ thông Cơ sở đến Phổ thông Trung học.

Là chương trình học Lập trình Pascal đầy đủ nhất và có tính hệ thống nhất từ xưa đến nay dành cho việc dạy và học trong nhà trường. Bộ sách dành cho các em mới tập lập trình đồng thời cũng dành cho các em khá và giỏi, các em trong lớp chuyên lớp chọn. Đặc biệt có nhiều bài toán dành cho việc rèn luyện học sinh đội tuyển thành phố, quốc gia, quốc tế. Ngoài ra còn có phần vui chơi giải trí, ca nhạc giúp các em thư giãn. Hãy khám phá với em học lập trình Pascal .

Giá bán:

40,000 VND/CD

Một số hình ảnh về phần mềm:

 


Giao diện phần mềm


Giới thiệu chương trình

 


Lập trình Pascal lớp 6


Lập trình Pascal lớp 7

 


Lập trình Pascal lớp 8


Lập trình Pascal lớp 9

 


Lập trình Pascal lớp 10


Lập trình Pascal lớp 11

 


Lập trình Pascal lớp 12


Bài đăng phổ biến