Chuyển đến nội dung chính

Lập Trình C# (WindowsForms)

Một số bài tập:
1. Mô phỏng game đoán số.
Luật chơi:
        o Đúng số và đúng vị trí   +
        o Đúng số mà sai vị trí      ?
        o Sai số và sai vị trí          -
        . . .
        - Kết quả được tạo ngẫu nhiên từ các số có 4 chữ số.
        - Các chữ số có giá trị từ 0-6.
        - Người chơi có 6 lần đoán.
Chương trình tham khảo:

2. In số điện tử
Yêu cầu: người dùng nhập vào 1 số ( hoặc 1 chuỗi số) yêu cầu in ra số đó dưới dạng số điện tử.
Chương trình tham khảo:
3. Mô phỏng game CARO (update)
4. Mô phỏng game DÒ MÌN (update)

Bài tập:

1. Lập trình mô phỏng game caro. 
+ Người đánh với người. ( máy làm trọng tài).
+ Người đánh với máy tính.

CODE:  
http://www.mediafire.com/?v1zdhsn72j9xid8

---------->
















2. Mô phỏng Game Rắn Ăn Mồi
Bản demo ban đầu khá đơn giản :D ^^

----Code: http://www.mediafire.com/?nd8huz3xjga18ou


Code Form chính:




Code class Snake:





Bài 1. Nhập vào 2 số a, b.
Tính tổng a + b





Một số kỹ năng lập trình cơ bản trong C++

I. Struct  (http://trunghieu-it.blogspot.com)
Đầu tiên mình lưu ý rằng là struct được hiểu đơn giản như là 1 kiểu dữ liệu mới được người dùng chủ động tạo ra để thuận tiện cho việc lập trình của mình ( từ các kiểu dữ liệu có sẵn trong C như int, char, float,....)
  Lưu ý rằng: các kiểu dữ liệu có trong C như int, char , float đã được hỗ trợ sẵn các hàm nhập xuất, các toán tử + - * / ,...
Để tạo 1 struct ( 1 kiểu dữ liệu mới ) cũng đồng nghĩa như mình phải tạo ra các hàm hỗ trợ nhập, xuất, các toán tử + - * /,........
  + Để làm việc với struct theo mình các bạn nên làm theo đúng quy trình (3 thành phần cơ bản)
      Khai_báo--> Viết hàm nhập cho struct ( nhập các thành phần của--> Viết hàm xuất các thành          phần của struct)
     i. Khai báo:
             struct <tên struct>
               {
                  // các thành phần của struct
                 <kiểu dữ liệu>  Thành_phần1;
                 <kiểu dữ liệu>  Thành_phần2;
                   ...........
                };
     ii. Nhập
            void Nhập(tên &struct)
                {
                 /// nhập các thành phần của struct
                 Nhập Thành_phần1;
                 Nhập Thành_phần2;
                .........
                 }
     iii. Xuất
            void Xuất(tên struct)
                {
                 /// nhập các thành phần của struct
                 Xuất Thành_phần1;
                 Xuất Thành_phần2;
                .........
                 }
+ Tiếp theo để vận dụng struct các bạn có thể coi nó như 1 kiểu dữ liệu chuẩn đã có (như int, float, char,...)
---tạo mảng, các thao tác trên mảng có thể thao tác bình thường 
Lưu ý:
Cách truy xuất dữ liệu của struct bạn dùng toán tử '.
      ví dụ:

                   struct Sach
                   {
                   char MaS[4];

                   char TenS[30];
                    int NXB;
                   };
Để truy xuất thông tin mã sách
                  Sach a; // khai báo 1 biến a có kiểu dữ liệu Sach
                  MaS <=> a.MaS;
                  Sach a[50]; khai báo 1 mảng a có kiểu dữ liệu Sach
                  MaS <=> a[i].MaS;

[ Một số lưu ý khi sài các hàm nhập xuất trong C++]
Đối với hàm nhập/Xuất thì đơn giản nhất là printf(); đi kèm vs scanf();
   + printf("XUất ra màng mình nôi dung ở đây"); // con trỏ màng hình vẫn ở trên dòng đó!
  -->XUất ra màng mình nôi dung ở đây con trỏ màng hình ở đây
   Ngoài printf(""); có thể sử dụng puts(); để xuất chuổi ra mảng mình!
   puts("XUất ra màng mình nôi dung ở đây") // chú ý là con trở màng hình đc xuống dòng!
   -->XUất ra màng mình nôi dung ở đây  // dòng 1
   con trỏ màng hình ở đây                       // dòng 2!
 + scanf(); nhận vào giá trị cho 1 or nhiều biến
lưu ý: đối với chuổi chỉ nhận đc vào đến khi gặp kí tự trắng or xuống dòng
Ví dụ:, char test[50]; printf("Nhập họ và tên: "); scanf("%s",&biến);
khi nhập: nguyễn văn tèo  thì biến test chỉ lưu đc "nguyễn" thôi! 
Giải pháp: sử dụng hàm gets(<tên biến chuổi>);
lưu ý khi sài gets(); các bạn phải để hàm xóa bộ nhớ đệm trước gets();
fflush(); gets();
giải thích: lấy lại ví dụ trước
 Ví dụ:, char test[50]; printf("Nhập họ và tên: "); scanf("%s",&biến);
khi nhập: nguyễn văn tèo  chúng ta nhấn enter để thực hiện công việc tiếp theo!
enter đc lưu vào bộ nhớ đệm nên khi gặp hàm gets(); chuổi nhập vào k chính xác!
=> để fflush(); xóa được phím enter trong bộ nhớ đệm. -> chuổi đc nhập -> nguyễn văn tèo

II. Bản chất của toán tử và đa năng hóa toán tử (nâng cao về C và C++) 
  1. Toán tử là 1 trong những thành phần tất yếu của ngôn ngữ lập trình, tất cả chúng ta đều biết. À, nó đơn giản như là a+b, 2-3, 2*4, rồi thì nhiều bạn còn biết như là ?: / .....etc
  2. Phân biệt toán tử đối với toán tử ta phải nhớ : cùng 1 cách viết có thể có 2 toán tử khác nhau.
Ví dụ: * toán tử này ai cũng biết rồi đúng ko, nhưng còn nhiều vấn đề cần lưu ý, nếu viết như thế tôi cũng chả biết bởi vì có 2 toán tử được viết như thế trong C, 1 cái * là 2 ngôi- phép nhân, 1 cái * là 1 ngôi toán tử truy xuất...
  3. Phân loại toán tử về cơ bản toán tử được chia ra làm 3 loại với những đặc thù khác nhau
- Unary operator - Toán tử 1 ngôi
- Binary operator - Toán tử 2 ngôi
- Tenary operator - Toán tử 3 ngôi
  4. Một số đặc thù khi sử dụng toán tử
+ Toán tử 1 ngôi luôn luôn đứng trước toán hạng
+ Có một số toán tử 2 ngôi ko yêu cầu phải truyền thêm tham số thứ 2
+ Chỉ có duy nhất 1 toán tử 3 ngôi trong C/C++, nên ta có thể hiểu luôn tenary operator cũng chính là toán tử đó (cho đến giờ là như thế)

  5. Sai lầm khi sử dụng toán tử (quan trọng)
+ Sai lầm khi dùng toán tử /
Về cơ bản thì các bạn mới rất hay lầm về toán tử / (division)
Ví dụ:

        float a;
        int b=2;
        a=3/4;<<<<<<< rồi chả hiểu sao a toàn bằng 0
        a=1/b;<<<<<<< rồi chả hiểu sao a kiểu này vẫn là 0
        //-------------

    int a=2,b=4;
    ..... ..... a/<<< kết quả cũng ko được như ý muốn


Khi sử dụng toán tử / cần chú ý :
Khi cả 2 toán tử thuộc dạng nguyên thì nó là phép chia lấy phần nguyên, ví dụ 9/6 được 1, 13/6 được 2
Khi 1 trong 2 toán tử thuộc dạng số thực thì nó sẽ là phép chia thập phân bình thường
 Ví dụ 1/3 được 0.33333333333

 giải pháp đó là chuyển kiểu:
------------- chính thức : (float)a/b trong C và C++ thêm 1 cách đó là float(a)/b 
------------- mẹo :1.*a/b và b/2. và 1./b

+ Sai lầm khi dùng toán tử ép kiểu trong C++
ép kiểu là toán tử , toán tử ép kiểu trong C có dạng (type)
trong C++ thêm 1 cách đó là type() (chỉ có trong C++, trong C ko hề có)
và 1 số ngừoi gặp sai lầm thế này

    float a;
    int b=2;
    a=float(3/4);<<<<<<< rồi chả hiểu sao a toàn bằng 0
    a=double(1/b);<<<<<<< rồi chả hiểu sao a kiểu này vẫn là 0





Tại sao lại sai ? Đơn giản bởi vì nó thực hiện trong ngoặc trước rồi mới ép kiểu

+ Sai lầm khi dùng toán tử so sánh
Sau đây tôi xin đề xuất 2 trường hợp sai lầm trong so sánh
Trường hợp 1:
    #include <stdio.h>
    #include <conio.h>
    void main()
    {
        float a=2.3432;
        if (a==2.3432) printf("bang nhau");        // kết quả là in ra không bằng nhau
        else printf("Khong bang nhau");            // tại sao vậy ?
        getch();
    }
Tại vì bạn à, khi ta viết 2.3432 thì đây là 1 hằng số, và kiểu dữ liệu của hằng số này là double!!! Và việc so sánh float và double có trouble đấy bạn à.
Giải pháp 1: if (a==2.3432f) printf................
Giải pháp 2: double a=2.3432; ................
(chú ý các cách double(a)==... hoặc (double)a== đều ko hiệu quả đâu)
Trường hợp 2:
    #include <stdio.h>
    #include <conio.h>
    void main()
    {
        int a=3,b=3,c=3;
        if (a==b==c) printf("bang nhau");  //in ra không bằng nhau
        else printf("Khong bang nhau");    //
        getch();
    }
+ Sai lầm khi dùng toán tử =
Một sai lầm rất hay mắc phải đó là ta dùng biểu thức gán trong mệnh đề logic
ví dụ : if (a=2) .... <<<<<<<< code này ko bao giờ được chấp nhận tại bất kì công ty nào, nên bạn cần chú ý lỗi này
     // thay vi viết:
    if(a==2)
    //chuyển thành
    if(2==a)
    //chả may viết cái
    if(a=2)//biên dịch vẫn chạy bình thường nhưng kết quả không như ý muốn
             //mà có thể là thực hiện khối lệnh đúng mãi(trừ a=0) 
    //nếu mà
    if(2=a)// báo lỗi khi biên dịch ngay biến không thể gắn cho hằng được.

[ ] Đa năng hóa toán tử << và >>
 I. Tìm hiểu về ý nghĩa của << và >> trong việc xuất nhập trong C++ 
Tìm hiểu về 2 toán tử << >>
+ Trong C : nó là toán tử 2 ngôi, khi tham số là 2 số nguyên thì được biết với cái tên dịch bit

+ Trong C++ :
Ngày hôm nay học về toán tử << và toán tử >> . Lúc đầu cảm thấy rất khó hiểu, về sau quyết định về nhà tìm hiểu bằng được họ hàng và gốc rễ thằng toán tử này mới được. Và sau đọc mấy bài viết trên http://diendan.congdongcviet.com/ . Đã phát hiện ra rất nhiều điều lý thú sau đây :
1. Khẳng định đây là 1 toán tử bình thường có 2 toán hạng tham gia. Nó ko phải là 1 thứ đặc biết gắn liền với cin như các bạn nghĩ. Có nghĩa là ko phải cứ >> là phải đi liền với cin và << phải đi cùng với cout. 
>> và << là 1 toán tử bình thường như + - * / mà trong đó cin, cout là 1 trong 2 thành phần tham gia vào phép toán mà thôi.
Ví dụ : a+b :đây là phép toán bao gồm 2 thành phần là a và b
cin>>a :đây là phép toán bao gồm 2 thành phần là cin và a
chứng minh :
Xèng viết đoạn code sau và nó chạy hoàn toàn đúng : 
    #include <iostream.h>
    #include <conio.h>
    struct phanso
        {
                int t; // tu
                int m; // mau
        };
    void operator>>(phanso &x,istream &is)
        {
            is>>x.t>>x.m;
        }
    void operator<<(phanso x,ostream &os)
        {
            os<<x.t<<"/"<<x.m;
        }
    void main()
        {
            phanso a;
           a>>cin;
            a<<cout;
            getch();
        }


Nhận xét

  1. Xin chào ạ,có thể gợi ý cho em về bài tập in ra số điện tử được không ạ?? Em xin cảm ơn ạ!

    Trả lờiXóa

Đăng nhận xét

Bài đăng phổ biến từ blog này

Jetpack Compose VS SwiftUI !VS Flutter

  Việc phát triển Android đã trở nên dễ dàng hơn khi các bản cập nhật liên tục đến. Sau bản cập nhật 2020.3.1, rất nhiều thứ đã thay đổi. Nhưng thay đổi chính mà tôi nghĩ hầu hết các nhà phát triển phải chờ đợi là Jetpack Compose cho ứng dụng sản xuất. Và Kotlin là lựa chọn duy nhất cho jetpack Compose, cũng là ngôn ngữ được ưu tiên. Để biết thêm chi tiết hoặc các thay đổi trên Jetpack Compose, bạn có thể truy cập vào https://developer.android.com/jetpack/compose Tương tự, IOS Development cũng cung cấp một tùy chọn để phát triển khai báo, SwiftUI. Trong IDE, không có thay đổi nào do điều này. Nhưng khái niệm gần giống với Jetpack Compose. Thay vì bảng phân cảnh, chúng tôi tạo giao diện người dùng bằng Swift. Để biết thêm chi tiết hoặc các thay đổi trên SwiftUI, hãy truy cập https://developer.apple.com/xcode/swiftui/ Hãy xem cách cả hai hoạt động bằng cách sử dụng một dự án demo. Tôi đã lấy một số ví dụ về số lần chạm tương tự của Flutter. 1. Android Jetpack Compose Chúng tôi có thể tạo

Thiết kế giao diện với DotNetBar (Phần 1)

Đây là phiên bản DotNetBar hỗ trợ C# và Visual Basic https://www.dropbox.com/s/wx80jpvgnlrmtux/DotNetBar.rar  , phiên bản này hỗ trợ giao diện Metro cực kỳ “dễ thương” Các bạn load về và cài đặt, khi cài đặt xong sẽ có source code mẫu của tất cả các control. Để sử dụng được các control của DotNetBar các bạn nhớ add item vào controls box. Thiết kế giao diện với DotNetBar, giao diện sẽ rất đẹp. Link các video hướng dẫn chi tiết cách sử dụng và coding: http://www.devcomponents.com/dotnetbar/movies.aspx Hiện tại DotNetBar có rất nhiều công cụ cực mạnh, trong đó có 3 công cụ dưới đây: DotNetBar for Windows Forms Requires with Visual Studio 2003, 2005, 2008, 2010 or 2012.   DotNetBar for WPF Requires with Visual Studio 2010 or 2012 and Windows Presentation Foundation.   DotNetBar for Silverlight Requires with Visual Studio 2010 or 2012 and Silverlight. Dưới đây là một số hình ảnh về các control trong DotnetBar.   Metro User Interface  controls with Metro Tiles, toolbars, slide panels, forms,

Một số bài tập Winform C#

Một số bài tập: 1. Mô phỏng game đoán số. Luật chơi:         o Đúng số và đúng vị trí   +         o Đúng số mà sai vị trí      ?         o Sai số và sai vị trí          -         . . .         - Kết quả được tạo ngẫu nhiên từ các số có 4 chữ số.         - Các chữ số có giá trị từ 0-6.         - Người chơi có 6 lần đoán. Chương trình tham khảo: 2. In số điện tử Yêu cầu: người dùng nhập vào 1 số ( hoặc 1 chuỗi số) yêu cầu in ra số đó dưới dạng số điện tử. Chương trình tham khảo: 3. Mô phỏng game CARO  (update) 4. Mô phỏng game DÒ MÌN (update)