2017年12月14日 星期四

[C] how to revert a string

#include <stdio.h>
#include <string.h>

#define SWAP(a,b) do{\
 a^=b;\
 b^=a;\
 a^=b;\
 } while(0)

void revert(char *str)
{
char* end = str+strlen(str)-1;

if(str){
while(str<end){
SWAP(*str,*end);
str++;
end--;
}
}
}

int main(int argc, char* argv[]){
char* str = argv[1];
if(str){
revert(str);
printf("%s\n",str);
}
else{
printf("%s\n","type a string !!!!");
}
}

注意:

  1. SWAP 的巨集:
    1. 第一個XOR昰得到兩數的異同
    2. 第二三則是,藉此做相同不變,不同變的動作
  2. argv為array of point to string, 0:指到程式本身 1~N: 則是後面接的字串

2017年11月21日 星期二

[math] 網站資料

[alg] 畫線- bresenhan & 吳小林


  • 概念: 什麼時候y會增加1(可以處理無法整除的誤差問題 循環誤差問題)
  • AAC stsc無法整除問題( chunk duration: 500ms, samples per chunk: 48000*0.5/1024=23.4375)套用bresenham演算法即 (chunkId, sampleTotal)如下改成(chunkId, sample per chunk)

pseudo code:
     gradient = 23.4375
     LOOP x, Xstart to Xend
          tmp = x*gradient-x*roundOff(gradient)
          y[i] = tmp - INT(tmp ) < 0.5  ?  roundOff(gradient) : roundup(gradient);

輸出:
x
1
2
3
4
tmp
0.4
0.9
1.3
2.2
y
23
24
23
24



吴小林直线算法(抗鋸齒線性算法)
  • 概念: y在此x時要畫多深的顏色(y小數點越大顏色越深)

藉由畫不同的深淺來使鋸齒狀不要那麼明顯,畫兩個像素點在岔在直線兩邊,並按照直線相近的顏色著色,而線段末端的像素點另外處理。如果線段寬度小於一像素,將會被作為特殊情況考慮。

假設 start(0,0) -> end(10,4)

function drawLine(x1,y1,x2,y2)
    dx = x2 - x1
//10
    dy = y2 - y1
//4
    if abs(dx) < abs(dy) then                
      swap x1, y1
      swap x2, y2
      swap dx, dy    end if
    if x2 < x1
      swap x1, x2
      swap y1, y2
    end if

    gradient = dy / dx //0.4
   
    //
1. handle first endpoint
    xend = round(x1)
// 0
    yend = y1 + gradient * (xend - x1) // 0
    xgap = rfpart(x1 + 0.5)
// 5
x1小數點
0
1
2
3
4
5
6
7
8
9
xgap
5
4
3
2
1
0
9
8
7
6

    xpxl1 = xend  // this will be used in the main loop//0
    ypxl1 = ipart(yend)
//0

    plot(xpxl1, ypxl1, rfpart(yend) * xgap)//(0,0,5)    //(10,4, 9*4=36) //離整數越接近顏色越深, 假設是10.1, 那麼在0這條線就要x9, 1這條就x1
    plot(xpxl1, ypxl1 + 1, fpart(yend) * xgap)
//(0,1,0) //(10,5, 1*4=4)

    intery = yend + gradient // first y-intersection for the main loop//0.4
   
    // handle second endpoint
    xend = round (x2)
//10
    yend = y2 + gradient * (xend - x2)
//4
    xgap = fpart(x2 + 0.5)
//5
x(fraction)
0
1
2
3
4
5
6
7
8
9
xgap
5
6
7
8
9
0
1
2
3
4

    xpxl2 = xend  // this will be used in the main loop//4
    ypxl2 = ipart (yend)
//10
    plot (xpxl2, ypxl2, rfpart (yend) * xgap)
//(10,4,5)
    plot (xpxl2, ypxl2 + 1, fpart (yend) * xgap)
//(10,5,0)
   
    // main loop
//什麼時後跳YY的比重有多少

    for x from xpxl1 + 1 to xpxl2 - 1 do
//x 1~9
        plot (x, ipart (intery), rfpart (intery))
//(1,0,6) ,(2,0,2),(3,1,8)
        plot (x, ipart (intery) + 1, fpart (intery))
//(1,1,4),(2,1,8),(3,2,2)
   intery = intery + gradient //
            end function



4




3




2



8(2)
1
2(0)
4(4)
6(8)
7(8)
0
1(5)
3(6)
5(2)

y/x 座標
0
1
2
3
輸出:  order(顏色深淺)

[Trap & Pitfals] 順序點(sequence point)

順序點,也稱作序列點,是電腦程式中一些執行點,在該點處之前的求值的所有的副作用已經發生,在它之後的求值的所有副作用仍未開始。在CC++程序設計語言中,表達式的值依賴於它的子表達式的求值順序

無順序點(undefined behavior):
  • "+":
=>a = f()+g(), "+"不是一個順序點因此表達式中有可能先調用f() or g()
  • arguments:
=>f(a,b,c) 參數列表中的","不是逗號運算浮,故參數的求直順序未指定。
  • 當一個變量在一個表達式修改不止一次
=>一個典型的C語言例子是表達式i = i++
  • 其中i的結果值是有二義性的,依賴於表達式求值順序:自增運算可能發生在賦值之前、之後或者交錯進行
    • Clause 6.5#2 of the C99 specification: "Between the previous and next sequence point an object shall have its stored value modified at most once by the evaluation of an expression. Furthermore, the prior value shall be accessed only to determine the value to be stored.
  • 在聲明序列的每個聲明(declarator)之間。例如,int x = a++, y = a++的兩次a++求值之間。[7]注意,此例不是逗號運算符(所以不是由左到右)


有順序點:

2017年11月20日 星期一

JOB

去年 7x15+10 = 115
今年 7.4x15+? = 110~N

target: 110*1.2= 132

奇景韌體:

年資 月薪(K) baseX14++10w(W)
1 680 9394
2 721 9957
3 764 10554
4 810 11186
5 858 11857
6 910 12568
7 965 13321
                  


2017年11月16日 星期四

關西 1/25~

1/25()
10:30 AM 關西機場
機場(拿行李+海關 11:30?)->京都車站(75min): HARUKA
(關西) 京都車站: 寄放行李,JR 奈良線(40 min)直接到宇治
  1. 宇治車站出來直接搭計程車去平等院
  2. 平等院參拜
  3. 出來吃中村藤吉 平等院店 (遊記)  (這間view比較好,河邊)
  4. 買抹茶 in 中村藤吉 & 伊藤佐右衛門
  5. 回京都
  6. 晚餐 in 京都車站10F拉麵小路
  7. Check in 飯店

1/26()
(京都)
上午(10:00-12:30): 錦市場(豆乳甜甜圈,蕨餅,有次)
下午:

新京極, loft
1/27()
(京都->奈良) 1/28還要住京都的話,行李寄原飯店即可
上午:
奈良火車站 : 大佛布丁
奈良商店街 : 打麻糬 麵鬥庵貓頭鷹咖啡館(推,有貓頭鷹站手上)
下午 : 東大寺,若草山
晚上 若草山 燒山節,住奈良

1/28()
(京都)
上午:
金閣寺



1/29()
(大阪) 一早班拉行李到大阪?
上午: 黑門市場(9:00 開始)-神戶牛(丸善食)
下午:
大阪城(2h)
心齋橋:LUKE'S LOBSTER龍蝦三明治
晚上:
道頓掘商圈

交通:
黑門市場->大阪城:
捷運 千日前線(日本橋大阪)->谷町線(谷町九丁目駅轉車)->(谷町四丁目站)9號出口
大阪城心齋橋
捷運長堀鶴見綠地線 (大阪商務園區上車  心齋橋下車)5號出口

1/30()
(大阪)
整天: 環球影城
1/31()
(大阪)
1130 AM關西機場

飯店:
嵐山: 星野飯店, 旅庭  #看起來無法排進去
京都: 日式旅店

交通:
ICOCA&HARUKA 套票

:
黑門市場(上午): 神戶牛

地點:
清水寺: 整修至2020(硬要排的話 可以參考 清水寺(一天行程)

京都:
金閣寺,銀閣寺: 17:00就關了
伏見的酒藏見學
伏見稻荷大社
貴船神社: 晚上有點燈

大阪:

 通天閣,梅田