[C11] Gợi ý ôn tập C# chuẩn bị cho buổi học cuối cùng

Tan Sy Nguyen

Cố Vấn CLB
Staff member
Chào các bạn,
Như anh đã trình bày trên lớp, để chuẩn bị cho buổi học cuối cùng thật tốt, đồng thời để củng cố lại kiến thức đã học trong 2 buổi vừa rồi anh sẽ đưa ra 2 bài tập gợi ý để các bạn luyện tập. Bạn nào code xong chạy OK thì có thể post lên bên dưới để mọi người cùng học hỏi :brick::brick::brick:.

Bài 1: Thực hiện chương trình console hiển thị bản tin (bất kì) từ MSP430 gửi lên máy tính.
- Gợi ý 1: Cài đặt cổng COM, các bạn tham khảo thêm để biết các thuộc tính (properties) cần cài đặt khi sử dụng cổng COM.
Code:
//Set up serial port
COM1.PortName = "COM1";
COM1.BaudRate = 9600;
COM1.DataBits = 8;
COM1.Parity = Parity.None;
COM1.StopBits = StopBits.One;
COM1.Handshake = Handshake.None;
COM1.RtsEnable = false;
- Gợi ý 2: Cài đặt hàm phục vụ sự kiện DataReceived:
Code:
//hàm main
...
//Setup event handler
COM1.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler_COM1);
...
 
private static void DataReceivedHandler_COM1(
                        object sender,
                        SerialDataReceivedEventArgs e)
{
    SerialPort sp = (SerialPort)sender;
    int numbyte = sp.BytesToRead;
    byte[] indata = new byte[numbyte + 1];
    sp.ReadByte(indata, 0, numbyte);
    sp.DiscardInBuffer();
    ...
    (cont)
}
Bài 2: Dựa vào chương trình giải phương trình bậc 2 đã viết và tài liệu về lập trình GUI của câu lạc bộ, hãy thực hiện 1 GUI giải phương trình bậc 2 đơn giản:
- Thông số nhập: a, b, c.
- Thông số hiển thị: x1, x2.
- Nút nhấn yêu cầu giải phương trình khi đã nhập xong a, b, c.
Giao diện có tính trực quan 1 tí :6cool_boss:

Notes: Các bạn tranh thủ thời gian để suy nghĩ về đề tài cuối khóa sẽ thực hiện và tìm kiếm partner cho mình. Buổi học cuối cùng sẽ là cơ hội ngàn vàng để các bạn được giải đáp những thắc mắc kỹ thuật (không phải tâm sinh lý tuổi mới lớn nhé =))) và nhận các gợi ý từ các anh chị. Trong thời gian thực hiện, do khoảng cách xa xôi về địa lý cũng như e thẹn mắc cỡ ngại hỏi ở lứa tuổi mới vào đời, có lẽ sẽ không có cơ hội tốt hơn vậy đâu.

Chúc các bạn hoàn thành thật tốt đề tài cuối khóa, tích lũy thật nhiều kiến thức quý báu và tìm được những người bạn mới sau khóa học này :D.
 

Vũ Long

Thành Viên PIF
Anh ơi. Có 1 bạn post code lên hỏi về bài tắt mở led bằng A,a,B,b anh cho làm trên lớp ạ. Cũng code đó em và các bạn về thử thì con vxl lại ko nhận được dữ liệu truyền từ máy tính xuống. Anh sang thread đó xem giúp ạ. Chứ vướng chỗ đó không làm tiếp được ạ.
 

Vũ Long

Thành Viên PIF
Khi giao tiếp UART sử dụng software phải để 2 cái thanh kia theo SW UART đúng không mấy anh? Em đổi HW hay SW gì thì cũng không nhận được data truyền xuống..
 

Tan Sy Nguyen

Cố Vấn CLB
Staff member
Để test code UART các bạn có thể sử dụng phần mềm tạo COM ảo trên máy tính ở link này:
Virtual Serial Port.
Chương trình tạo ra 2 cổng COM (ví dụ COM1, COM2) thì Tx và Rx của 2 COM này đã nối chéo sẵn với nhau. Để debug, các bạn dùng chương trình đã viết mở và gửi bản tin qua COM1, đồng thời mở terminal COM2 để xem thử nhận đúng bản tin chưa và ngược lại.
Cùng với việc test code software, bạn dùng terminal để gửi ký tự xuống MSP xem thử có nhận được không và nhận đúng không.
--> Test từng phần xem thử code C# chạy sai hay code MSP sai --> chỉnh sửa lại cho phù hợp.
Chúc bạn may mắn !!! :5cool_sweat:
 

MrChips

Thành Viên PIF
Bài 2: Dựa vào chương trình giải phương trình bậc 2 đã viết và tài liệu về lập trình GUI của câu lạc bộ, hãy thực hiện 1 GUI giải phương trình bậc 2 đơn giản:
- Thông số nhập: a, b, c.
- Thông số hiển thị: x1, x2.
- Nút nhấn yêu cầu giải phương trình khi đã nhập xong a, b, c.
Đây là code của mình, khá hoàn chỉnh :1cool_byebye: (loại trường hợp giải ra nghiệm phức). Giao diện Windows Phone đẹp, hấp dẫn :4cool_beauty:
Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace Phuong_Trinh_Bac_2
{
    public partial class Form1 : Form
    {
        double a, b, c, x1=0, x2=0;
        public Form1()
        {
            InitializeComponent();
        }
 
        private void exitButton_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        private void sovleButton_Click(object sender, EventArgs e)
        {
            if (txtSoa.Text == "" || txtSob.Text == "" || txtSoc.Text == "")
            {
                label_status.Text = "Vui lòng nhập a, b, c";
            }
            else
            {
                //Kiểm tra nhập đúng số
                bool result = Double.TryParse(txtSoa.Text, out a);
                result &= Double.TryParse(txtSob.Text, out b);
                result &= Double.TryParse(txtSoc.Text, out c);
                if (!result)
                    label_status.Text = "Vui lòng nhập số";
 
                else
                {
                    label_status.Text = "Ready";
                    if (a == 0)
                    {
                        //Phương trình bậc nhất
                        if (b == 0)
                        {
                            if (c == 0)
                            {
                                label_status.Text = "PT vô số nghiệm";
                            }
                            else
                            {
                                label_status.Text = "PT vô nghiệm";
                            }
 
                        }
                        else
                        {
                            label_status.Text = "PT có một nghiệm";
                            x1 = -c / b;
                            txtx1.Text = x1.ToString();
                            txtx2.Text = "0";
                        }
                    }
                    // Phương trình bậc 2
                    else // if(a != 0)
                    {
                        double delta = b * b - 4 * a * c;
                        if (delta < 0)
                            label_status.Text = "PT vô nghiệm";
                        else
                        {
                            if (delta == 0)
                            {
                                label_status.Text = "PT có một nghiệm kép";
                                x1 = -b / 2 / a;
                                txtx1.Text = x1.ToString();
                                txtx2.Text = x1.ToString();
                            }
                            else
                            {
                                label_status.Text = "PT có hai nghiệm";
                                x1 = (-b + (double)Math.Sqrt(delta)) / 2 / a;
                                x2 = (-b - (double)Math.Sqrt(delta)) / 2 / a;
                                txtx1.Text = x1.ToString();
                                txtx2.Text = x2.ToString();
                            }
                        }
                    }
                }
            }
 
        }
 
        private void clearButton_Click(object sender, EventArgs e)
        {
            txtSoa.Clear();
            txtSob.Clear();
            txtSoc.Clear();
            txtx1.Clear();
            txtx2.Clear();
        }
    }
}
Hình ảnh giao diện:


:D
Source code: link
 
Top