2012/12/16

[Software] Aegisub

A tool can convert subtitles from .ass/.ssa to .srt
support subtitle format: .ass .ssa .srt

Website: http://www.aegisub.org/

2012/08/26

[C++]亂數機率

好久沒coding了
趁著空檔簡單寫個測試亂數機率的程式
來個不傷腦力的這樣...

------------------------------------CODE------------------------------------

#include <cstdlib>
#include <iostream>
#include <time.h>

using namespace std;

int main(int argc, char *argv[])
{
 
    int Cnt;
    int Get;
    int Box[9][2];
    float Temp = 0;
    srand(time(NULL));
 
    for(int i=0; i<9; i++)
    {
        Box[i][0] = i+1;
        Box[i][1] = 0;
    }
 
 
    cout << "實驗次數:";
    cin >> Cnt;
 
    for(int i=Cnt; i>0; i--)
    {
        Get = rand()%9+1;
        Box[Get-1][1] = Box[Get-1][1]+1;
    }
 
    cout << endl;
    cout << "數字\t次數\t機率" << endl;
 
    for(int i=0; i<9; i++)
    {
        for(int j=0; j<2; j++)
        {
            cout << Box[i][j] << "\t" ;
        }
        Temp = Box[i][1];
        cout << Temp / Cnt << endl;
    }
 
    system("PAUSE");
    return EXIT_SUCCESS;
}

------------------------------------CODE------------------------------------

完畢,繼續唸書去...

2012/07/03

解決cin與getline()合用的問題

The problem: 

cin>> leaves the newline character (\n) in the iostream.  If getline is used after cin>>, the getline sees this newline character as leading whitespace, thinks it is finished and stops reading any further.


Reference:
http://mathbits.com/mathbits/compsci/APstrings/APgetline.htm (英文原文)
http://csie-tw.blogspot.tw/2007/10/cin-getlinecin-s.html (藏經閣,中文)

2012/06/18

數學動態繪圖軟體Geogebra

剛好最近弄三角函數需要
找到此一方便好用的數學動態繪圖軟體 Geogebra
重點是免費 + 跨平台
https://sites.google.com/a/ymsh.tp.edu.tw/geogebra/

2012/06/13

[Android]BMI

package kevin.demo;

import java.math.BigDecimal;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class BMIActivity extends Activity implements OnClickListener
{
private TextView txtResult;
private EditText edtWeight;
private EditText edtHeight;
private Button btnGo;
private TextView txtScale;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        txtResult = (TextView)findViewById(R.id.txtResult);
        txtScale = (TextView)findViewById(R.id.txtScale);
        edtHeight = (EditText)findViewById(R.id.edtHeight);
        edtWeight = (EditText)findViewById(R.id.edtWeight);
        btnGo = (Button)findViewById(R.id.btnGo);
        
        btnGo.setOnClickListener(this);
        
    }

public void onClick(View v) 
{
// TODO Auto-generated method stub
if(v.equals(btnGo))
{
float W,H,BMI;
W = Float.parseFloat(edtWeight.getText().toString());
H = Float.parseFloat(edtHeight.getText().toString());
H = H / 100;
BMI = W / (H*H);
BigDecimal  Get  =  new  BigDecimal(BMI);  
float  Result  =  Get.setScale(2,  BigDecimal.ROUND_HALF_UP).floatValue();  
//四捨五入並保留兩位小數
txtResult.setText("您的BMI: "+Float.toString(Result));
if(BMI < 18.5)
{
//體重過輕
txtScale.setText("體重過輕");
}
else if((BMI >= 18.5)&&(BMI < 24))
{
//正常範圍
txtScale.setText("正常範圍");
}
else if((BMI >= 24)&&(BMI < 27))
{
//過重
txtScale.setText("體重過重");
}
else if((BMI >= 27)&&(BMI < 30))
{
//輕度肥胖
txtScale.setText("輕度肥胖");
}
else if((BMI >= 30)&&(BMI < 35))
{
//中度肥胖
txtScale.setText("中度肥胖");
}
else if(BMI >= 35)
{
//重度肥胖
txtScale.setText("重度肥胖");
}
}
}

2012/05/26

install oracle-java on Ubuntu via PPA



找到比較方便的作法
利用PPA來源

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java7-installer

完成後用java-version來看看java是否已經替換成oracle java 7了

2012/05/20

刪除Ubuntu磁區後修復Windwos mbr

如果直接在Windwos底下的磁碟管理工具將Ubuntu所在磁區刪除
下次開機就會碰到GRUB無法抓到分割區的問題
如果要Windows正常運作

以Windows 7為例
用Windows 7安裝光碟開機
選擇修復選項
在命令提示字元中輸入

bootsect /nt60 SYS /mbr

接著重新開機即可

參考:http://ahhafree.blogspot.com/2011/11/ubuntu-grub-rescue.html

[C++]猜數字

C++寫的猜數字程式
猜一個四位數字(千位數不為0,且沒有數字重複)
它會提示有幾A幾B
ex: 2A1B
2A代表有2個數值猜對且位置正確
1B代表有1個數值猜對但位置不正確

以下為code



#include <iostream>
#include <cstdlib>
#include <sstream>
#include <time.h>

using namespace std;

//把整數轉為字串的副程式IntToString
string IntToString (int N)
{
    string Get;
    stringstream ss;
    ss << N;
    ss >> Get;
    return Get;
}

int main()
{
    string Answer; //儲存答案
    string Guess; //儲存使用者猜的數字
    int Num; //儲存由rand()產生的亂數
    int A = 0;
    int B = 0;
    int Time = 5; //一個回合可以猜的次數
    int Round = 1; //回合數 初始值 = 1

    srand(time(NULL));

    while(true)
    {
         Answer = IntToString(rand()%9+1); //先將答案的千位數字指定為1~9之間的任意數字

        for (int i=1; i<4; i++)
        {
            //產生謎底
            Num = rand()%10;

            if(Answer.find(IntToString(Num)) == -1)
            {
                Answer = Answer + IntToString(Num);
            }

            else
            {
                i--;
            }
        }

        cout << "----------------------" << endl;
        cout << "Round " << Round << endl; //提示目前回合
        cout << endl;

        while(true)
        {
            //將A與B值初始化
            A = 0;
            B = 0;

            //使用者猜數字
            cout << "請猜一個四位數字: ";
            getline(cin,Guess);

            //判斷幾A幾B
            for (int i=0; i<4; i++)
            {
                for (int j=0; j<4; j++)
                {
                    if((Answer[i] == Guess[j])&&(i == j))
                    {
                        A++; //值吻合且位置相同
                    }

                    else if((Answer[i] == Guess[j])&&(i != j))
                    {
                        B++; //值吻合但位置不同
                    }
                }
            }

            //輸出提示
            if (A == 4)
            {
                cout << "恭喜答對!" << endl;
                break;
            }

            else if((A != 4)&&(Time > 1))
            {
                Time--;
                cout << A << "A" << B << "B" << endl;
                cout << "尚餘 " << Time << " 次機會..." << endl;
                cout << endl;

                //Debug過程用
                //cout << Answer << endl;
            }

            else
            {
                break;
            }

        }

        //
        cout << A << "A" << B << "B" << endl;
        cout << endl;
        cout << "正確解答: " << Answer << endl;
        Round++;
        Answer = "";
        Guess = "";
        Time = 5;
    }

    return 0;
}

2012/05/02

[C++]跑馬燈改版

電腦課實做
隨手弄弄的作品...
就...橫桿轉呀轉的同時顯示進度...


#include <cstdlib>
#include <iostream>

using namespace std;

void Delay()
{
    for(int i=0; i<60000000; i++)
    {
        //用於時間延遲的副程式
    }
}

int main(int argc, char *argv[])
{
    for(int i=1; i<=100; i++)
    {
        if(i % 4 == 0)
        {
            cout << "|" << "  .     " << i << "%";
        }
       
        else if(i % 4 == 1)
        {
            cout << "/" << "  ..    " << i << "%";
        }
       
        else if(i % 4 == 2)
        {
            cout << "─" << "  ...   " << i << "%";
        }
       
        else if(i % 4 == 3)
        {
            cout << "\" << "  ....  " << i << "%";
        }
       
        Delay();
        system("CLS");
    }
   
    system("PAUSE");
    return EXIT_SUCCESS;
}

2012/03/24

[java]猜數字


package kevin.demo;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class GuessApp
{

/**
* @param args
* @throws IOException
* @throws NumberFormatException
*/
public static void main(String[] args) throws NumberFormatException, IOException
{
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int Guess; //存放使用者輸入的數字
int Ans; //存放隨機產生的數值(答案)

Ans = (int)(Math.random()*100+1); //Math.random()產生的型別為double(介於0.0~1.0),需用(int)轉換成int型別

for(int i=5; i>0; i--)
{
System.out.print("請猜一個數字:");
Guess = Integer.parseInt(br.readLine());

if(Guess == Ans)
{
System.out.println("恭喜您!答對了!");
break;
}
else if(Guess < Ans)
{
System.out.println("再大一點,您還剩下"+(i-1)+"次機會");
}
else if(Guess > Ans)
{
System.out.println("再小一點,您還剩下"+(i-1)+"次機會");
}
}

System.out.println("正解為:"+Ans);
}

}

2012/02/04

Ubuntu/Linux Mint安裝jdownloader

紀錄如何在Ubuntu/Linux Mint安裝jdownloader並啟用自動關機功能

首先,藉由ppa來源安裝jdownloader


 sudo add-apt-repository ppa:jd-team/jdownloader
 sudo apt-get update
 sudo apt-get install jdownloader

安裝後如果要啟用jdownloader的自動關機
必須要讓使用者具有root權限來做關機的動作
所以接著要把使用者加入到sudoer文件中

為了防止出錯
先把sudoer這個檔案做備份
sudo cp /etc/sudoer /etc/sudoer.bak

接著用文字編輯器(這裡用的是vim)打開sudoer
sudo vim /etc/sudoer

在sudoer的最後加入
使用者名稱 ALL= NOPASSWD: /sbin/shutdown

存檔離開之後就可以正確執行jdownloader的自動關機功能

P.S如果所有步驟做完仍然不能執行,請先把sudoer回復
sudo cp /etc/sudoer.bak /etc/sudoer

2012/01/28

[C++]Lottery Number Creator

實作C++亂數的使用
範例是用樂透彩,由電腦亂數取出每一組有6個數字(不重複)的序列並印出

#include <iostream>
#include <time.h>

using namespace std;

int main()
{
    int a,n;
    int Index = 0;
    int Box[6];
    bool Exist ;

    srand(time(NULL));

    cout << "Please input a number:";
    cin >> n;

    while(n > 0)
    {
        for(int i=0; i<6; i++)
        {
            a = rand()%49+1;
            Exist = false;

            for(int j=0; j<Index; j++)
            {
                if(Box[j] == a)
                {
                    Exist = true;
                    break;
                }
            }

            if(Exist == false)
            {
                Box[Index] = a;
                Index++;
            }

            else
            {
                i--;
            }
        }

        for(int i=0; i<6; i++)
        {
            if(Box[i] < 10)
            {
                cout << 0 << Box[i] << " ";
            }
            else
            {
                cout << Box[i] << " ";
            }
        }

        cout << endl;
        n--;
        Index = 0;
    }

    system("PAUSE");
    return 0;
}

2012/01/19

Blogger Dynamic Views

把網誌的樣式換成Blogger Dynamic Views
(其實是在http://btemplates.com/找到的樣式套上來都有點問題)
有別以往靜態顯示
從左上角的下拉式選單可以變換動態顯示的模式
整體看起來的效果滿簡潔的
小小的缺點是目前還沒有辦法加上像以前側欄的小工具、連結...等