Monthly Archives: Tháng Chín, 2016

Thực hành Java: Bài 2-OOP. Xây dựng lớp Hình Tam Giác

Hướng dẫn

Để tiện cho việc theo dõi, tôi đặt method main vào trong lớp HinhTamGiac, các bạn có thể viết lớp HinhTamGiac không chứa method main sau đó tạo lớp khác sử dụng lớp HinhTamGiac
Code:

import java.util.Scanner;
import javax.swing.JOptionPane;
public class HinhTamGiac {
    private int ma;
    private int mb;
    private int mc;
    //Constructor
    public HinhTamGiac(){
        ma=mb=mc=0;
    }
    public HinhTamGiac(int a,int b,int c){
        if(a<0){
            JOptionPane.showMessageDialog(null,"canh phai >0",
                    "Thong bao",JOptionPane.WARNING_MESSAGE);
            ma=0;
            return;
        }
        if(b<0){
            JOptionPane.showMessageDialog(null,"canh phai >0",
                    "Thong bao",JOptionPane.WARNING_MESSAGE);
            mb=0;
            return;
        }
        if(c<0){
            JOptionPane.showMessageDialog(null,"canh phai >0",
                    "Thong bao",JOptionPane.ERROR_MESSAGE);
            mc=0;
            return;
        }
        if(a+b<=c||a+c<=b||b+c<=a) {
            JOptionPane.showMessageDialog(null,"Khong phai tam giac",
                    "Thong bao",JOptionPane.ERROR_MESSAGE);
            ma=mb=mc=0;
            return;
        }
        ma=a;
        mb=b;
        mc=c;
    }
    //Get methods
    public int getCanhA(){
        return ma;
    }
    public int getCanhB(){
        return mb;
    }
    public int getCanhC(){
        return mc;
    }
    //set methods
    public void setCanhA(int a){
        ma=a;
    }
    public void setCanhB(int b){
        mb=b;
    }
    public void setCanhC(int c){
        mc=c;
    }
    public boolean laTamGiac(){
        return(ma+mb>mc&&ma+mc>mb&&mb+mc>ma);
    }
    public boolean laTamGiac(int a,int b,int c){
        return(a+b>c&&a+c>b&&b+c>a);
    }
    public int getChuvi(){
        return ma+mb+mc;
    }
    public double getDienTich(){
            double p=(double)(ma+mb+mc)/2;
            return Math.sqrt(p*(p-ma)*(p-mb)*(p-mc));                   
    }
    public static void main(String[] args) {
        System.out.println("nhap ba canh hinh tam giac");
        Scanner input=new Scanner(System.in);
        int ma=input.nextInt();
        int mb=input.nextInt();
        int mc=input.nextInt();
        HinhTamGiac tamgiac=new HinhTamGiac(ma,mb,mc);
        if(tamgiac.laTamGiac()){
            System.out.println("Chu vi: "+tamgiac.getChuvi());
            System.out.println("Dien tich: "+tamgiac.getDienTich());
        }         
    }   
}

Thực hành Java: Bài 24. Tạo xâu có các từ theo thứ tự ngược

Hướng dẫn

Code đơn giản như sau:

import java.util.Scanner;
public class Bai24 {
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        String str=input.nextLine();
        String[] spStr=str.split(" ");
        StringBuilder ketqua=new StringBuilder();
        for(int i=0;i<spStr.length;i++){
            ketqua=ketqua.append(spStr[spStr.length-i-1]).append(" ");
        }
        System.out.println(ketqua);
    }
    
}

Thực hành Java: Bài 23. Tách mã vùng số điện thoại

Hướng dẫn

Trước tiên cần kiểm tra xem xâu số điện thoại người dùng nhập vào đúng định dạng chưa bằng cách sử dụng biểu thức chính quy.
Sau đó dùng method .split để tách các cụm số dựa vào ký tự ngăn cách bao gồm ký tự dấu cách và dấ “-”

import javax.swing.JOptionPane;
 class Bai23 {
    public static void main(String[] args) {
        String str=JOptionPane.showInputDialog("Nhap vao chuoi so dt").trim();
        while(!str.matches("\\([\\d]{3}\\) [\\d]{3}-[\\d]{7}")) {
            str=JOptionPane.showInputDialog("Khong phai so dt, xin nhap lai");            
        }
        String[] mang1=str.split(" ");
        mang1[0] = mang1[0].replace("(", "");
        mang1[0] = mang1[0].replace(")", "");
        String maQuocGia=mang1[0];
        String[] mang2=mang1[1].split("-",2);
        String maVung=mang2[0];
        String soDT = mang2[1];
        System.out.print("Ma qgia: "+maQuocGia+"\nMa vung: "+maVung
                            +" \nSo dien thoai: "+soDT);
    }
    
}

Thực hành Java: Bài 22. Xóa nguyên âm trong xâu

Hướng dẫn

import java.util.Scanner;
public class Bai22 {
    public static void main(String[] args) {
        String[] vowel={"a","e","i","o","u","y"};
        Scanner input=new Scanner(System.in);
        String str=input.nextLine();
        for(String ch:vowel){
            if(str.contains(ch))
                str=str.replaceAll(ch, "");
        }
        System.out.println(str);
    }
}

Thực hành Java: Bài 21. Loại bỏ khoảng trắng thừa trong xâu

Hướng dẫn

Cách đơn giản nhất giải quyết bài này là sử dụng lớp  StringBuilder để append lần lượt các ký tự có ý nghĩa của xâu. Các bạn có thể dùng cách khác như chuyển xâu sang mảng ký tự và tiến hành loại bỏ khoảng trắng thừa sau đó chuyển mảng ký tự trở lại xâu


import java.util.Scanner;
public class Bai21 {
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        String str=input.nextLine().trim();
        StringBuilder stb=new StringBuilder();
        for(int i=0;i<str.length();i++){
            if(str.charAt(i)!=' ') stb.append(str.charAt(i));
            else if(str.charAt(i)==' '){
                stb.append(' ');
                while(str.charAt(i)==' ') i++;
            }
        }
        System.out.println(stb);       
    } 
}

Thực hành Java: Bài 20. Đếm chữ cái, chữ số, từ trong xâu

Hướng dẫn

Sử dụng các phương thức của lớp Character:  .isDigit() để kiểm tra xem ký tự có phải là số không và .isLetter() để kiểm tra xem ký tự có phải chữ cái không

Sử dụng

 str.split("\\s",0) 

để tách xâu thành các xâu con phân cách nhau bởi khoảng trắng. Lưu ý là  method này sẽ tạo ra một số xâu con rỗng nếu trong xâu có từ 2 khoảng trắng liên tiếp trở lên. Vì vậy sau sau khi Split xong tả chỉ đếm các xâu con không rỗng và đó chính là các xâu chứa từ.

 


import java.util.Scanner;
public class Bai20 {
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        String str=input.nextLine();
        int letterCount=0,digitCount=0,wordCount=0;
        for(int i=0;i<str.length();i++){
            if(Character.isLetter(str.charAt(i))) letterCount++;
            else if(Character.isDigit(str.charAt(i))) digitCount++;                         
        }
        String[] strArr = str.split("\\s",0);
        for (String strArr1 : strArr) {
            if (!strArr1.isEmpty()) 
                wordCount++;         
        }
        System.out.println("So ky tu: "+letterCount);
        System.out.println("So chu so: "+digitCount);
        System.out.println("So tu: "+wordCount);
    }   
}

Thực hành Java: Bài 15. Đếm số lần xuất hiện ký tự

Hướng dẫn

Sử dụng phương thức .charAt(index) để kiểm tra ký tự tại vị trí index trong xâu ký tự


import java.util.Scanner;
public class Bai15 {
public static void main(String[] args) {
     Scanner input=new Scanner(System.in);
     System.out.print("Nhap vao 1 chuoi ky tu:");
     String str=input.next();
     System.out.print("Ky tu can dem so lan xuat hien: ");
     char ch=(char) input.next().charAt(0);
     int count=0;
     for(int i=0;i<str.length();i++)
         if(ch==str.charAt(i)) count++;
     System.out.println("So lan xuat hien "+ch+": "+count);
  }
}

Thực hành Java: Bài 17. Nhập vào một xâu. Tạo ra xâu đảo ngược với xâu đã nhập.

 

Hướng dẫn:

 Bài này có nhiều cách làm như: sử dụng StringBuilder để xây dựng xâu đảo ngược bằng cách append từ ký tự cuối xâu đến ký tự đầu xâu; đọc và in ra màn hình từng ký tự từ cuối xâu đến đầu xâu; sử dụng mảng ký tự. Ở đây tôi sử dụng mảng ký tự để đảo ngược xâu


import java.util.Scanner;

public class Bai17 {

public static void main(String[] args) {

     System.out.println("Xin moi nhap mot xau ky tu: ");

     Scanner input=new Scanner(System.in);

     //Doc vao mot xau

     String xau=input.nextLine();

     //Chuyen xau thanh mang ky tu

     char[] xaudao=xau.toCharArray();

     //Doi vi tri cac ky tu o hai dau xau

     for(int i=0;i<xau.length()/2;i++){

          char temp=xaudao[i];

          xaudao[i]=xaudao[xaudao.length-i-1];

          xaudao[xaudao.length-i-1]=temp;

     }

     //Chuyen mang ky tu thanh xau

     String ketqua= String.valueOf(xaudao);

     System.out.println("xau dao: "+ketqua);

     }

}

Code lập trình Robocon

Có thể nói Robocon là niềm đam mê của nhiều bạn trẻ, thậm chí cả những người lớn tuổi. Một cảm giác vui sướng thật khó tả khi từ những đồ nhôm nhựa, phế liệu mà chúng ta có thể phù phép cho nó chuyển động và làm theo ý định của chúng ta. Đối với những bạn mới bắt tay vào làm robocon thì chắc chắn không tránh khỏi những khó khăn vất vả và vật lộn ban đầu, và cũng có những khi cảm thấy một chút nản không hề nhẹ.

Bản thân tôi cũng rất may mắn được tham gia robocon trong một số năm, từ vai trò là thành viên đội chơi rồi đến chỉ đạo viên, trong quá trình tham gia cũng có những khi thất bại trắng tay nhưng cũng có những thời khắc đỉnh cao. Thành tích cao nhất mà chúng tôi đạt được là năm 2012 khi ấy tôi làm chỉ đạo viên kiêm lập trình viên của đội robocon CNTT-12 (các bạn có thể tìm trên youtube các trận thi đấu của CNTT-12 nhé) – Đội CNTT-12 giành giải 3 Robocon toàn quốc – đây cũng là thành tích cao nhất mà trường Sĩ Quan Thông Tin đã đạt được trong suốt chặng đường tham gia thi đấu Robocon toàn quốc.

Công việc làm robot gồm 3 khâu chính: Cơ khí, mạch điện và lập trình

Để giúp các bạn mới bắt tay vào làm robocon, tôi xin phép chia sẻ ra đây một số kinh nghiệm để các bạn tham khảo:

  1. Yếu tố con người: Đây là yếu tố quyết định sự thành công của đội. Để có được một đội robocon thành công thì đội đó phải là đội của những người đam mê, đoàn kết, chịu khó, kiên trì, có quyết tâm cao. Tất cả thành viên trong đội phải cùng nhau bàn bạc chia sẻ các công việc, không được “bao trọn gói” – nghĩa là một người vừa ý tưởng, vừa cơ khí, vừa lập trình vừa điều khiển – vì như các bạn đã biết, chỉ có chuyên môn hóa mới nâng cao được hiệu quả công việc và đỡ tốn thời gian. Và còn một điểu nữa là tinh thần và tâm lý thi đấu cũng là một yếu tố quyết định, càng luyện tập nhiều các bạn càng nâng cao bản lĩnh thi đấu – điều này các bạn có thể thấy ở các đội robocon của ĐH Lạc Hồng, họ luyện tập rất nhiều và thành công cũng rất nhiều
  2. Cơ khí: Vấn đề thiết kế cơ khí cho robot là vấn đề rất khó và công phu, trước khi bắt tay vào làm cơ khí thì các bạn phải có ý tưởng tốt sau đó phác họa rồi mới làm được. Đối với những bạn học chuyên ngành cơ khí thì có thể còn qua công đoạn thiết kế các bản vẽ kỹ thuật rồi demo hoạt động sau đó mới bước vào chế tạo. Nhưng với dân nghiệp dư như chúng tôi thì bỏ qua khâu phác họa các bản vẽ mà sau khi có ý tưởng là chế tạo thử luôn, để làm được những cơ cấu cơ khí tốt, các bạn cần tham khảo những cơ cấu mà các đội robocon trước đây đã làm, và một số cơ cấu mà bạn tham khảo được trên mạng hoặc ngoài thực tế
  3. Mạch điện: Hiện nay, công việc làm mạch rất đơn giản vì trên thị trường có rất nhiều công ty bán các module chức năng, chúng ta chỉ việc mua về và xem hướng dẫn rồi lắp ráp là xong, giá cả còn rẻ hơn rất nhiều so với mạch điện chúng ta tự mày mò thiết kế. Thường thì các Module mạch điện bao gồm: Mạch vi xử lý, module điều khiển động cơ, module cảm biến dò line, module la bàn điện tử, module xử lý ảnh, … và một số thành phần khác như : công tắc hành trình, cảm biến nhận vật, cảm biến siêu âm, …Thường thì khi các bạn mua các module này thì nhà sản xuất hướng dẫn kỹ thuật rất chu đáo nên rất dễ sử dụng.
  4. Lập trình: Công việc lập trình là công đoạn cuối cùng để thiết kế bộ não cho robot. Sau khi chế tạo xong cơ khí, lắp ráp mạch điện xong cho robot, các bạn sẽ phải viết chương trình điều khiển robot. Hiện nay trên thị trường có rất nhiều dòng vi xử lý vì, tùy thuộc vào khả năng và ý định mà các bạn chọn một loại vi xử lý để lập trình. Bản thân tôi, ban đầu dùng Vi xử lý(VXL) 89v51RD2 – dòng 8051, sau đó là Atmega64, Pic, Arm(kit Stm32F4 Discovery). Về ngôn ngữ lập trình là C, môi trường lập trình(IDE) là Keil C. Hiện nay do kit Arduino tương đối rẻ nên các bạn có thể xem xét dùng các dòng Arduino, loại này rất dễ dùng và cộng đồng hỗ trợ cũng rất đông đảo
  5. Các địa chỉ bán mạch điện: http://hshop.vn, http://roboconshop.com, http://titans.com.vn, http://robocontech.vn. vân vân và vân vân.

Code robocon tham khảo cho các bạn lập trình: do đã lâu ngày không làm robocon nên chỉ còn mấy code này thôi