2020年5月24日 星期日

[APCS]C 字串的問題

C 字串的問題

char *number1[3] = {"asdf", "qwer", "zxcv"};
printf("%s", number1[0]);

這樣會印出asdf,不過我不理解為甚麼printf後面放的是number1[0]而非*number1[0]?

我的理解是number1[0]存放的應該是一個記憶體位置,而*number1[0]才是指向asdf的實際位置,不曉得對不對?

==================================

說明如下:

char *number1[3] = {"asdf", "qwer", "zxcv"};


number1是字元指標陣列.. 所以初指值指向3個字串位址
number1[0] --> "asdf"
number1[1] --> "qwer"
number1[2] --> "zxcv"


變數名稱  變數記憶體位址    內容(假設) 
number1[0]  &number1[0]         0x7ff0
number1[1]  &number1[1]         0x7ff6
number1[2]  &number1[2]         0x7fff


記憶體位址       內容
                        0    1     2      3    4
0x7ff0             'a'   's'    'd'    'f'   '\0'
0x7ff6             'q'   'w'   'e'    'r'   '\0'
0x7fff              'z'   'x'   'c'    'v'   '\0'


(1) *number1[0] ==>'a'
(2) *(number1[0]+1) ==>'s'
(3) number[0] 的型態是 char * ,內容是0x7ff0
(4) number[0][0] 的型態是 char,內容是'a'


printf 的%s 輸出字串, 必須提供字串位址

printf("%s\n","asdf") ==> asdf
printf("%s\n",number1[0] ) ==> asdf
printf("%c\n",number1[0][0]) ==> a
printf("%c\n",number1[0][1]) ==> s
printf("%c\n",*number1[0] ) ==> a
printf("%c\n",*(number1[0]+1) ) ==> s

Notepad++ 縮排改成4個Space




用 Notepad++ 開 Python程式預設縮排是是用 Tab,若要改成以4個 SPACE 空白縮排,可以從Settings -> Preferences 進行修改









[APCS] 2種函數參數傳遞方式



根據課程的第二階段的1-2 多項式-2的06:47的例子
我自己試寫,如下列圖檔
為什麼這樣會錯誤?




另外,影片中我有疑問:
1.程式中沒有m,那為什麼「*m」可以指向「math」?
2.我不懂為什麼影片中的程式碼polynomial(float x, float *m, int size)
*m要加*,但size卻不用加*。不都是從別的地方取來的?

2種函數參數傳遞方式, 函數內想要使用別人的陣列時, 只要傳遞陣列起始位址就可引參考引用. 而不必copy所有內容 (很花時間.)
size 只是傳給一個數字, 因為也沒有要在函數內修改傳進來的size變數, 所以可以傳值過去 (只有4個byte). 不過要傳size位址
也是可以的
將函數定義改成 int f(int x, int *math, int *size)
在主程式改成 f(x,math,&size) 來呼叫


2020年4月30日 星期四

Pi2+V2.0 子卡測試程式說明


原Pi image 已啓動SSH,  因此只要知道Pi 的IP位址, 即可連入. (Pi 要接上和PC同一個網段或者直接對接。若是對接,Windows 會自動分配一個169.254.x.x的IP給Pi)

由於開機時可先將LCM 16x2x2 接上, 如影片所示,可以看到程式將PI的位址輸出在LCM上了 (可能要調整LCM背光模組才能看到顯示的文字)



此處顯示的PI的IP位址為 169.254.238.238


(1) 使用SSH連入可以用 MobaXterm或 Putty登入Pi


登入帳號: pi
登入密碼: raspberry

(2) 啓動 Jupyter Notebook

cd bin

./run_ipython_ntoebook.sh





接著開啓chome 瀏覽器,輸入網址連到Rasbperry Pi 的Jupyter Notebook

http://169.254.238.238:8888/




開啓 sample_code/GPIO_I2C_SPI/RPi-GPIO.ipynb , 並執行它. 執行底下
GPIO LED cell 後, 可以看到LED亮啓










Note: 檔案傳輸可以用WinSCP

2020年4月25日 星期六

Spyder編輯器偏好設定


1.) Spyder編輯器中更改程式縮排為Tab
當用Spyder 來開發Python 程式時, 預設縮排 (indentation)是用4個SPACE, 若要改為TAB鍵可以在此修改

Tools -> Preference -> Editor -> Advanced settings -> Indentation characters




2.) Spyder編輯器中更改背景顏色

3.)   Spyder Console 調整字體大小