2011年10月24日 星期一

Dichotomy Sort 二分排序法

二分法排序(Dichotomy Sort)的精神就是將目標對切,與中間元素相比,較小就把左邊剩餘的陣列再對切,然後重複做一樣的事直到最後
反之亦然,把所有元素都做過這個動作後就是排序好的陣列

int array[100];
for (int i = 0; i < 100; i++)
{
 int start, end, mid;
 start = 0;
 end = i - 1;
 mid = 0;
 int temp = array[i];
 while (start <= end)
 {
  mid = (start + end) / 2;
  if (array[mid] > temp)//目標元素在陣列左邊
  {
   end = mid - 1;
  }
  else
  {
   start = mid + 1;
  }
 }
 for (int j = i - 1; j > end; j--)//找到插入的位置,將其後的元素後移一位
 {
  array[j + 1] = array[j];
 }
 array[end + 1] = temp;

}

2011年10月5日 星期三

不定參數的使用 (Who to use Variable-length argument)

所謂的不定參數指的就是在定義function時,我們無法事前得知會傳入的參數個數(如printf)時的一種function撰寫技巧
以下是使用不定參數另外定義一個function,讓我們可以在print時可為console畫面加上顏色。

#define DBG_RED "\033[22;31m"
#define DBG_GREEN "\033[35;32m"
#define DBG_BLUE "\033[22;34m"
#define DBG_MAGENTA "\033[22;35m"
#define DBG_WHITE "\033[01;37m"
#define DBG_YELLOW "\033[01;33m"

#define DBG_LRED "\033[01;31m" 
#define DBG_LGREEN "\033[01;32m"
#define DBG_LBLUE "\033[01;34m"


void mydebug(const char *color,const char *format, ...);//__attribute__((format(printf,2,3)));

#define DBG(color, fmt, arg...)  mydebug(color, fmt, ## arg)

void mydebug(const char *color,const char *format, ...)
{
 static char text[512];
 va_list ap; 
 
 va_start(ap, format);
 vsnprintf((char *)text,512,format, ap);
 va_end(ap);
 if (text[strlen(text) - 1] == '\n')
 {
  text[strlen(text) - 1] = 0;
  printf("%s%s\033[0m\n",color,text);
 }
 else
  printf("%s%s\033[0m",color,text);
}

USAGE:
DBG(DBG_RED, "Himiro Test:%s\n", "Hello world");

2011年10月3日 星期一

在Access 2007找到表單

access2007
左上角的「office選項」點下去→access選項→目前資料庫→顯示表單

2011年9月19日 星期一

Tera Term VT - 為不同 serial port 設定專屬 shortcut

如果你手上有多個Device,同時每個Device都有自己的baud rate,可以試著做以下的設定,

這樣就不用每次開起Tera Term的時候都有另外再調整設定

先建立一個Tera Term的捷徑,然後右鍵->內容,在目標的最後面加上

/BAUD=57600 /C=3

就可以了,以下是說明。

/BAUD=
baud rate of serial port. If the baud rate not supported by Tera Term is specified, this option is ignored.

/C=
Serial port
/C=1 COM1
/C=2 COM2
/C=3 COM3
:
/C=256 COM256

參考連結:
Tera Term command line

2011年8月4日 星期四

How to calculate function time cost in C

#include <sys/time.h> 
#include <stdio.h> 

int main(){
 struct timeval tv1, tv2;
 gettimeofday(&tv1,NULL);

 usleep(1000);

 gettimeofday(&tv2,NULL);

 printf("Time Cost is %d ms\n", (tv1.tv_sec - tv2.tv_sec) * 1000 );
}

2011年8月3日 星期三

SQLite Compile

今天在Compile sqlite要用configure時遇到一些錯誤 
checking host system type... Invalid configuration `cr16-uclinux': machine `cr16 ' not recognized 
configure: error: /bin/sh ./config.sub cr16-uclinux failed 

 copy /usr/share/libtool/config/config.guess and config.sub to your working folder can fix this problem 

And... 

#error It appears you have defined _FILE_OFFSET_BITS=64. Unfortunately, uClibc was built without large file support enabled. 
#error Sorry... uClibc was built without large file support! 

只要在Makefile加上下面兩個flags就可以過了
-DSQLITE_OMIT_LOAD_EXTENSION
-DSQLITE_OMIT_COMPLETE

11/10/18補充:

-DSQLITE_DISABLE_LFS
#error Sorry... uClibc was built without large file support!

2011年6月17日 星期五

warning: this decimal constant is unsigned only in ISO C90

今天compile時看到一個Warning message寫著

warning: this decimal constant is unsigned only in ISO C90

當做Pointer是否溢位的判斷時,因為用到了4294967295這個值來做比對而導致C90的問題

對一個Pointer來說 4294967295,當表著一個最大的位置,本身應當是沒錯的

可是當我們直接拿來使用時compiler不知道它真正的用途而報警告

這時只要我們將4294967295加上一個u,即4294967295u,讓compiler知道這是一個unsigned的值,就不會報錯了。