博客來網路書店查詢

書名

博客來網路書店查詢

星期六, 9月 24, 2016

CodeBlocks於Win7 中文碰到問題

中文碰到問題的說明,以Win7為主

Settings功能表內的 editor內
Encoding settings 設定為UTF-8
Settings功能表內的 Compiler內
Compiler settings內的
Other compiler options內輸入
-fexec-charset=BIG-5

-------->
BIG5 是無效的 BIG-5才有效

-->
加入設定後,建議可先把程式碼拷貝出來,儲存成
文字檔案,避免變成亂碼。


重新啟動CodeBlocks
專案略做修改 讓他重新編譯
如果專案修改後還是亂碼,建議開啟新的專案 重新打字
或者拷貝文字檔的內容進去

------------------------------------
XP環境建議改為Windows-950編碼

Code::Blocks操作

黃色代表沒有儲存
綠色代表已經儲存

工具列上的Abort按鈕並不是關閉程式
而是將程式轉移到背景
如果不小心轉移到背景 請利用工作管理員找尋
再強制關閉

程式編譯之前必須先把執行的程式關閉
如果寫好的程式在執行 是無法編譯


專案的切換

一次只能執行一個專案 一個專案內只能有一個main() 語法

請在你想要執行的專案名稱上點兩下就可以切換


程式碼是哪一個專案?
左上角會顯示
如果真的找不出來是哪個專案 建議關閉後重新開啟


Code::Blocks Debug

除錯的目的
檢查程式流程
確認資料的變化


執行的時候 可以按  F7 或著
Next Line的按鈕 往下一行執行
就可以了解程式執行的流程-->
如果程式跑的流程跟你想的不一樣,
請再確認你的想法,如果你的想法正確,
請修改程式流程。

也可以監看變數的變化
可以在Watches內新增監看的變數

這個新增的變數內容可以修改  不影響原有的資料
只是要做流程的驗證

程式執行流程 也可以查看最下方的Debugger的訊息顯示

除錯若要結束 可以按除錯工具列的X鈕結束

星期二, 8月 16, 2016

視窗程式設計流程

視窗程式設計流程
1.請由左側工具列點選工具置放於表單上
2.右上角的方案總管內設定資源或是視窗程式所需的新增項目
3.右下角的屬性視窗:可變更表單上的控制項屬性
4.右下角的事件視窗:可選擇表單上的控制項執行哪一個事件

例如 我按下按鈕之後,label上會顯示現在的時間
==>
按鈕被按下了,才會有後面的事情。所以程式寫在button1的click事件內

至於程式部分該怎麼寫,就請參考成是基本處理流程
--------------------------------------------------------------------
程式基本處理流程
1.先有想法才有做法。請先把想法整理出來,一次只做一個動作,請排順序。
2.畫流程圖
3.流程圖中每一個執行動作可以有多個上一步,但每個執行動作只能有一個下一步。



若對這主題想做進一步社團討論,請參考以下連結

星期一, 6月 06, 2016

蘋果電腦上的C++程式開發

首先請先開啟Xcode,也就是最左邊數過來第三個軟體:

接著請您點選 Create a new Xcode project:
接著請您選取OS X內的Application內的Command Line Tool後按下Next:
請您輸入專案名稱(Product Name)以及組織單位簡稱(Organization identifier),再請您挑選程式語言(Language),為了配合課本,C語言只提格式代碼,後續練習均以C++為主,再請按下Next:
請您輸入挑選儲存的路徑,再請按下Create,專案建立了:
請您輸入程式碼,接著再請您按下執行鈕(最左邊的三角形按鈕):
執行畫面將會出現在程式碼的右下方:

星期日, 5月 29, 2016

組裝的第二個問題-電池供電給Arduino板子




Arjin Chen 老師說:
 本例由電池供電給Arduino板子有2種方式
1. 使用圖一的DC快速接頭(公頭), 接至Arduino板子的DC母插座, 正極是接至L298N的12V-GND-5V插座中的5V
2. 直接由L298N 5V拉一條線(杜邦公公線即可)接至Arduino板子的VIN供電
1是之前的接法, 2是簡化後的接法, 都可以
--
L298N的GND一條是接到電池負極, 一條是接到Arduino板的GND
--
因掃地機有多個馬達, 故電池採用4節+2節(原2馬達輪子用的話, 4節就夠了), 所以請將4+2電池盒串聯(4節的黑接到2節的紅)即可
--
快速接頭使用較彈性, 一個可用在掃地機, 另一個可搭配9V電池扣, 使用9V電池供電給離線的Arduino板使用(例機械手臂、LED/LCD)

另外一個配線的補充

星期五, 5月 27, 2016

C++與SQLite--資料列表

void getTableData()
{
    sqlite3_stmt *statement;
    char *query = "select * from student";
    if ( sqlite3_prepare(dbfile, query, -1, &statement, 0 ) == SQLITE_OK )
    {
        int ctotal = sqlite3_column_count(statement);
        int res = 0;
        while ( 1 )
        {
            res = sqlite3_step(statement);
            if ( res == SQLITE_ROW )
            {
                for ( int i = 0; i < ctotal; i++ )
                {
                    string s = (char*)sqlite3_column_text(statement, i);
                    cout << s << " " ;
                }
                cout << endl;
            }
            if ( res == SQLITE_DONE )
            {
                cout << "done " << endl;
                break;
            }
        }
    }
}

C++與SQLite--刪除資料

int deleteRow()
{
    int rollno;
    cout << " 輸入學號 :" ;
    cin >> rollno ;
    if(cin.fail( ))
    {
      cin.clear( );
      cout<<"學號格式錯了";
      return 0;
    }
    std::stringstream strm;
    strm << "delete from student " << " where roll=" << rollno ;
    string s = strm.str();
    char *str = &s[0];
    //cout << str << endl;
    sqlite3_stmt *statement;
    int result;
    char *query = str;
    {
        if(sqlite3_prepare(dbfile,query,-1,&statement,0)==SQLITE_OK)
        {
            int res=sqlite3_step(statement);
            result=res;
            sqlite3_finalize(statement);
        }
        return result;
    }
    return 0;
}

C++與SQLite--更新資料

int updateRow()
{
    int rollno;
    float gpa;
    cout << " 輸入學號 :" ;
    cin >> rollno ;
    if(cin.fail( ))
    {
      cin.clear( );
      cout<<"學號格式錯了";
      return 0;
    }
    cout << " 輸入新的平均成績 : " ;
    cin >> gpa;
    if(cin.fail( ))
    {
      cin.clear( );
      cout<<"成績格式錯了";
      return 0;
    }
    std::stringstream strm;
    strm << "update student set cgpa=" << gpa << " where roll=" << rollno ;
    string s = strm.str();
    char *str = &s[0];
    //cout << str << endl;
    sqlite3_stmt *statement;
    int result;
    //char *query="update student set cgpa=3.66 where roll=11";
    char *query = str;
    {
        if(sqlite3_prepare(dbfile,query,-1,&statement,0)==SQLITE_OK)
        {
            int res=sqlite3_step(statement);
            result=res;
            sqlite3_finalize(statement);
        }
        return result;
    }
    return 0;
}

C++與SQLite--新增資料

student getStudent()
{
    student stud;
    int id;
    string name;
    float gpa;
    cout << " 輸入學號 :" ;
    cin >> id;
    if(cin.fail( ))
    {
      cin.clear( );
      cout<<"學號格式錯了";
    }
    cout << " 輸入姓名 : " ;
    cin >> name;
    cout << " 輸入平均成績 : " ;
    cin >> gpa;
    if(cin.fail( ))
    {
      cin.clear( );
      cout<<"成績格式錯了";
    }
    stud.setid(id);
    stud.setName(name);
    stud.setcgpa(gpa);
    return stud;
}
int addDataRow()
{
    student stud = getStudent();
    //cout << stud.getName() << endl;
    std::stringstream strm;
    strm << "insert into student(roll,name,cgpa) values(" << stud.getid() << ",'" << stud.getName() << "'," << stud.getcgpa() << ")";
    string s = strm.str();
    char *str = &s[0];
    //cout << str << endl;
    sqlite3_stmt *statement;
    int result;
    //char *query="insert into student(roll,name,cgpa)values(4,'uuu',6.6)";
    char *query = str;
    {
        if(sqlite3_prepare(dbfile,query,-1,&statement,0)==SQLITE_OK)
        {
            int res=sqlite3_step(statement);
            result=res;
            sqlite3_finalize(statement);
        }
        return result;
    }
    return 0;
}

C++與SQLite--引用項目

#include
#include
#include
#include
#include
using namespace std;
#include "sqlite3.h"
#define DB "sea.s3db"
bool isOpenDB = false;
sqlite3 *dbfile;
bool ConnectDB ( );
void DisonnectDB ( );

組裝時的問題-馬達與感測器




Arjin Chen老師回應:
那一條是GND, 接在任一GND(接地)即可, 以你目前線色看來
綠-->5V
藍-->A0(左)/2(中)/4(右)
紫-->A1(左)/3(中)/5(右)
灰-->GND

Litamei Chen 老師回應:
您好
黑色線是接地GND

吳慧琳老師回應:

A.二個馬達二條各接IDE板GND+5V

B.感測三組四條接法一樣如下:
最左邊接5V
最右邊接GND
其他中間二個又分如下:
左感應接A0,1
中感應接A2,3
右感應接A4,5




我再補一張圖片說明感測器

星期六, 5月 21, 2016

C Sharp 上課六次的主題

理論上是有點多,所以希望上課的學員先上過C/C++初進階之後再上我的課程,比較能了解我在說甚麼。
因為書本太厚加上時間太短,所以我自己有安排主題,六天課程我的安排進度如下
 第一天 數值計算、資料輸入與例外處理、條件分析
第二天 迴圈、陣列、引用VB的inputbox進行練習
第三天 亂數、ArrayList、圖片控制項的使用
第四天 兩個按鈕使用同一個函數、大量圖片使用、三個骰子遊戲
第五天 textBox能力的繼承、自己建立DLL檔案、使用者控制項轉為dll、影音播放
第六天 快顯選單、多表單、點唱機

當然如果大家之後有其他想法可以跟我說,我們上課主題可以變更。

人類繼承觀念內的子類別部分

class son1:public father1
{
public:
      float money;
    son1( )
    {
        money=father1::money*0.6;
        father1::money=father1::money- money;
        cout << "son1 father1 money="<        cout << "son1  money="<    }
};
class son2:public father1
{
public:
      float money;
    son2( )
    {
        cout << "son2 father1 money="<        money=father1::money*0.4;
    }
};
class grandson:public son1
{
public:
    float money;
    grandson( )
    {
        cout << "grandson father1 money="<        money=son1::money*0.6;
        son1::money=son1::money-money;
        cout << "grandson  money="<< money<< endl;
        cout << "grandson son1 money="<< son1::money<< endl;
    }
};

星期五, 5月 20, 2016

關於this

class部分
class Box
{
   public:
      Box(double l=2.0, double b=2.0, double h=2.0)
      {
         cout <<"建立物件" << endl;
         length = l;
         breadth = b;
         height = h;
      }
      double Volume()
      {
         return length * breadth * height;
      }
      int compare(Box box)
      {
         return this->Volume() > box.Volume();
      }
   private:
      double length;     
      double breadth;     
      double height;     
};
 
程式流程
 
   Box Box1(3.3, 1.2, 1.5);    
   Box Box2(8.5, 6.0, 2.0);    

   if(Box1.compare(Box2))
   {
      cout << "Box2 小於 Box1" <<endl;
   }
   else
   {
      cout << "Box2 大於等於 Box1" <<endl;
   } 

星期二, 4月 19, 2016

voctor中包含的函數用法

c.assign(beg,end)c.assign(n,elem)    將[beg; end)區間中的資料傳送資料給c。將n個elem的資料傳送資料給c。
c.at(idx)    傳回索引idx所指的資料,如果idx超越索引上限,拋出out_of_range。
c.back()    傳回最後一個資料,不檢查這個資料是否存在。
c.begin()   傳回vector中的第一個資料位址。
c.end()        指向vector中末端元素的下一個,指向一個不存在元素。
c.capacity()    返回vector中資料個數。
c.max_size()   返回vector中最大資料的數量。
c.size()    返回vector中實際資料的個數。
c.empty()    判斷vector是否為空。
c.erase(pos) 刪除pos位置的資料,傳回下一個資料的位置。
c.erase(beg,end) 刪除[beg,end)區間的資料,傳回下一個資料的位置。
c.clear()     移除vector中所有資料。
c.front()    傳回第一個資料。
get_allocator    使用構造函數返回一個資料。
c.insert(pos,elem) 在pos位置插入一個elem資料,傳回新資料位置。
c.insert(pos,n,elem)  在pos位置插入n個elem資料。無返回值。
c.insert(pos,beg,end)    在pos位置插入在[beg,end)區間的資料。無返回值。
c.pop_back()    刪除最後一個資料。
c.push_back(elem)    在尾部加入一個資料。
c.rbegin()    傳回一個逆向隊列的第一個資料。
c.rend()    傳回一個逆向隊列的最後一個資料的下一個位置。
c.resize(num)    重新指定隊列的長度。
c.reserve()    保留適當的容量。
c1.swap(c2) 與  swap(c1,c2)    將c1和c2元素互換。同一個操作。
vector          創建一個空的vector。
cvector c1(c2)  複製一個vector。
vector c(n)  創建一個vector,含有n個資料。
ector c(n, elem) 創建一個含有n個elem資料的vector。
vector c(beg,end) 創建一個以[beg;end)區間的vector。
c.~ vector ()    銷毀所有資料,釋放內存。
operator[]    返回vector中指定位置的一個引用。

星期二, 3月 22, 2016

Windows Azure的mysql與python

因為Windows Azure註冊出了問題,目前我還沒測試。
網路上查到的
Windows Azure的mysql連結參數:

db = MySQLdb.connect(host= "windows azure url goes here",user="uname",passwd="pwd",db="dbname")

不過 Pythone所提供的mysql連結參數:
db = MySQLdb.connect(host= "host","uname","pwd","dbname")


這語法得再查證,不過除了連結資料庫不同外,Windows Azure的mysql還得做以下兩件事情
1.防火牆上開啟3306
2.針對你的資料庫設定一個連線帳號,例如
 GRANT ALL ON SOMEDATABASE.* TO USERNAME@% IDENTIFIED BY 'SOMEPASSWORD'

python新增與查詢的參考語法
import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Select qSQL with id=4.
cursor.execute("SELECT qSQL FROM TBLTEST WHERE id = 4")

# Fetch a single row using fetchone() method.
results = cursor.fetchone()

qSQL = results[0]

cursor.execute(qSQL)

# Fetch all the rows in a list of lists.
qSQLresults = cursor.fetchall()
for row in qSQLresults:
    id = row[0]
    city = row[1]

    #SQL query to INSERT a record into the table FACTRESTTBL.
    cursor.execute('''INSERT into FACTRESTTBL (id, city)
                  values (%s, %s)''',
                  (id, city))

    # Commit your changes in the database
    db.commit()

# disconnect from server
db.close()


MySQL與python可參考:
http://www.tutorialspoint.com/python/python_database_access.htm

星期三, 2月 24, 2016

好像新版的CodeBlocks於Win7環境內會有問題?

好像新版的CodeBlocks於Win7環境內會有問題,我其實都沒碰過,但有非常多的朋友反映...
如果13版無法使用,那就改用12版吧~ 於C/C++編輯編譯其實是一樣的...https://sourceforge.net/projects/codeblocks/files/Binaries/12.11/Windows/