2011/10/31

[C++]簡易寫檔


#include <cstdlib>
#include <iostream>
#include <fstream>

using namespace std;

int main(int argc, char *argv[])
{
    string FileLocation;
    string Msg;
 
    cout << "請輸入輸出檔路徑:";
    getline(cin,FileLocation); //ex: c:\test.txt
   
    ofstream outfile(FileLocation.c_str());
 
    while(true)
    {
        cout << "請輸入一段文字:";
        getline(cin,Msg);
     
        if(Msg == "EXIT")
        {
            break;
        }
     
        outfile << Msg << endl;
        Msg = "";
    }
 
    system("PAUSE");
    return EXIT_SUCCESS;
}

2011/10/23

[Archlinux]Yaourt安裝

參考:
https://wiki.archlinux.org/index.php/Yaourt_(%E6%AD%A3%E9%AB%94%E4%B8%AD%E6%96%87)

Linux 手動校時

安裝完Archbang之後
進到系統發現右下角的時間並不正確
但是Openbox下時間的更改方法疑似和以前慣用的Gnome不同
直接按下工具列上時間的部份
但是並沒有找到可以調整的地方
(題外話:Gnome 3之後感覺愈變愈花俏了...)

所以就開終端機手動調整了~
作法鳥哥的Linux私房菜中有詳盡解說

*參考:http://linux.vbird.org/linux_server/0440ntp.php#date (第十五章、時間伺服器:NTP伺服器)


*後記
找到問題其實是出在rc.conf裏面的設定
安裝Archbang的時候在time and date選項裡把它選成UTC
參考Arch的官方文件這樣改
HARDWARECLOCK="localtime"
就正常了!!

[ArchLinux]Archbang中nvidia驅動&解析度設定

安裝Archbang的時候預設會安裝顯卡開源驅動
系統安裝完成之後如果要換成閉源驅動(以下以Nvidia為例)
實作步驟如下:

1.需要先移除衝突的套件libgl
pacman -Rdd libgl


2.接著安裝Nvidia驅動
pacman -S nvidia nvidia-utils

安裝需要先重新啟動,但是重啟之後在Screen Resolution中,能夠調整的解析度只有1024*768、800*600,並沒有達到手邊顯示卡能夠支援的最高解析度
所以參考了這幾篇:

3.為了讓系統出現更高解析度的選項,到/etc/X11/xorg.conf.d/ 底下,編輯20-gpudriver.conf這個檔案
(這邊以nano編輯器操作,也可以vi、vim來編輯)
cd /etc/X11/xorg.conf.d/  (可以先 ls 確認20-gpudriver.conf是否存在)
nano 20-gpudriver.conf

4.在Section選項中找到"Driver"欄位,因為我是用nvidia的顯示卡,所以把欄位內容改成"nvidia"
這邊的設定值原本是"vesa",(大概是這樣所以系統無法正確抓到driver?)
猜想這邊應該是就廠牌來填入資料
裝好驅動後依照廠牌填入nvidia、ati、intel...(依實際狀況而定)


離開前別忘了儲存設定!!

5.重新啟動電腦即可在Screen Resolution中更換支援的更高解析度




*後記
後來在家目錄下發現了Archbang的說明文件(檔名DOC)

2011/10/13

[C++]取出字串中的單字


#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    //取出字串中的單字,其中單字與單字間以一個或數個空白隔開
    string str;
    string Temp = "";
 
    cout << "請輸入一段文字:";
    getline(cin,str);
    str = str + " "; //加入空白讓取值時判斷是否到達字串邊界
 
    for(int i=0; i<str.length(); i++)
    {
        if(str[i] != ' ')
        {
            Temp = Temp + str[i];
        }
        else if((str[i] == ' ')&&(str[i+1] != ' ')) //抓到最後一個空白才輸出
        {
            cout << Temp << endl;
            Temp = ""; //清空Temp的值讓迴圈進行下一次取新的值
        }
    }
 
    system("PAUSE");
    return EXIT_SUCCESS;
}

寫程式用的字型

最近重灌電腦
安裝IDE時順便上網找找有哪些適合拿來寫程式的字型
後來在這篇找到
作者推薦的字型裡實際用過看起來都滿舒服的
而且都有附上字型檔的載點
在這邊作個筆記備忘

P.S 文中提到的微軟Consolas字型可以從微軟網站免費下載
http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=17879

2011/10/11

[C++]求解兩數GCD、LCM (遞迴)


用遞迴來寫其實比較容易體會輾轉相除的過程

#include <cstdlib>
#include <iostream>

using namespace std;

int GCD(int a,int b)
{
    if(b == 0)
    {
        return a;
    }
    else
    {
        return GCD(b, a%b);
    }
}
int main(int argc, char *argv[])
{
    int m, n;
    cout << "請輸入第一個數:";
    cin >> m;
    cout << "請輸入第二個數:";
    cin >> n;
 
    int GetGcd = GCD(m,n);
    cout << "GCD: " << GetGcd << endl;
    cout << "LCD: " << GetGcd*(m/GetGcd)*(n/GetGcd) << endl;
 
    system("PAUSE");
    return EXIT_SUCCESS;
}

[C++]求解兩數GCD、LCM (非遞迴)

今天碰到的題目
利用輾轉相除法來做
非遞迴的版本


#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    int max,min,tmpm,tmpn,temp;
 
    cout << "請輸入第一個數:";
    cin >> max;
    cout << "請輸入第二個數:";
    cin >> min;
 
    if(max < min)
    {
        temp = max;
        max = min;
        min = temp;
    }
 
    tmpm = max;
    tmpn = min;
 
    if(max % min == 0)
    {
        cout << "GCD = " << min << endl;
        cout << "LCM = " << max << endl;
    }
    //
    else
    {
        while(min > 0)
        {
            max = max % min;
            min = min % max;
            if(min == 0)
            {
                cout << "GCD = " << max << endl;
                cout << "LCM = " << max*(tmpm/max)*(tmpn/max) << endl;
            }
        }
    }
 
    system("PAUSE");
    return EXIT_SUCCESS;
}