【C++ 筆記】函數(Function)(下) - part 11
【C++ 筆記】函數(Function)(下) - part 11 很感謝你點進來這篇文章。 你好,我並不是什麼 C++、程式語言的專家,所以本文若有些錯誤麻煩請各位鞭大力一點,我極需各位的指正及指導!!本系列文章的性質主要以詼諧的口吻,一派輕鬆的態度自學程式語言,如果你喜歡,麻煩留言說聲文章讚讚吧! 函數參數的傳遞方式 如果函數要使用參數,則必須宣告接受參數值的變數。這些變數稱為函數的形式參數。 形式參數如同局域變數(Local Variable),自從函數被呼叫開始,就被建立,函數程式碼結束後,則形式參數自動被刪除。 呼叫函數時,有三種參數的傳遞方式,如下: 傳值呼叫(call by value) 傳址呼叫(call by address / call by pointer / pass by address) 傳參(考)呼叫(call by reference) 這三種方式有什麼差異呢?請繼續看下去~ 傳值呼叫(call by value) 傳值呼叫中,被傳遞的參數實際值會複製給形式參數,因此無論如何修改函數內的形式參數皆不會改變到實際參數值。 這就好像世界上總有許...
【C++ 筆記】指標(Pointer)(上) - part 10
【C++ 筆記】指標(Pointer)(上) - part 10 很感謝你點進來這篇文章。 你好,我並不是什麼 C++、程式語言的專家,所以本文若有些錯誤麻煩請各位鞭大力一點,我極需各位的指正及指導!!本系列文章的性質主要以詼諧的口吻,一派輕鬆的態度自學程式語言,如果你喜歡,麻煩留言說聲文章讚讚吧! 指標(Pointer) 在講指標之前,我們都知道變數具有「值(value)」、「資料型態(Data Type)」、「記憶體位址(Memory Address)」三種特性。 我們要存取變數的記憶體位址,需要使用「&」符號加在變數名前面獲取,如下: 1&variable 透過以下範例,可以知道變數的記憶體位址如何獲取: 12345678#include <iostream>using namespace std;int main(){ int a = 0; cout << &a; return 0;} 輸出結果: 10x7ffdd306c874 :::success 問題來了,指標是啥呢? ::: 指標...
【C++ 筆記】字串(String) - part 9
【C++ 筆記】字串(String) - part 9 很感謝你點進來這篇文章。 你好,我並不是什麼 C++、程式語言的專家,所以本文若有些錯誤麻煩請各位鞭大力一點,我極需各位的指正及指導!!本系列文章的性質主要以詼諧的口吻,一派輕鬆的態度自學程式語言,如果你喜歡,麻煩留言說聲文章讚讚吧! 字串(String) 字串是由許多的字元所組成的,但字串實際上它是一個一維陣列,以 null 字元(‘\0’)終止符號為結尾。 如下: 1char a[6] = {'H', 'e', 'l', 'l', 'o', '\0'}; Hello 共有 5 個字元,但實際上在 C++ 中存在於 6 個字元,因多一個 ‘\0’ 表示字串的結尾。 arraysize 因此要寫 6。 也可以寫成這樣: 1char a[] = "Hello"; 但實際上我們也不用那麼麻煩,加上 ‘\0’ 上去,C++ 編譯器會在初始化陣列時自動加上去。 以下是一個範例...
【C++ 筆記】陣列(Array) - part 8
【C++ 筆記】陣列(Array) - part 8 很感謝你點進來這篇文章。 你好,我並不是什麼 C++、程式語言的專家,所以本文若有些錯誤麻煩請各位鞭大力一點,我極需各位的指正及指導!!本系列文章的性質主要以詼諧的口吻,一派輕鬆的態度自學程式語言,如果你喜歡,麻煩留言說聲文章讚讚吧! 陣列(Array) 陣列(Array),又稱數組,在 Python 中,此種類似的資料結構稱為列表(List),是將一組資料儲存在記憶體的集合。 陣列是一種集合,在 C++ 中只能儲存固定資料型態的元素於陣列中。 在此之前,我們需要了解陣列(Array)、元素(Element)、索引(Index)、資料型態(Data Type)之間的關係。 Image Source:https://www.geeksforgeeks.org/cpp-arrays/ 以上是陣列的圖示,所謂的元素就像是數列裡面的各個數字一樣,如:{1,2,3,4,5,6},1~6 即為元素。 所謂的索引(Index),就是每個元素的位置,C++ 的陣列索引以 0 為開頭,不是 1 唷。 以上圖而言,元素 2 的索引就是 0,它所...
【C++ 筆記】數學函式庫(cmath library) - part 7.5
【C++ 筆記】數學函式庫(cmath library) - part 7.5 很感謝你點進來這篇文章。 你好,我並不是什麼 C++、程式語言的專家,所以本文若有些錯誤麻煩請各位鞭大力一點,我極需各位的指正及指導!!本系列文章的性質主要以詼諧的口吻,一派輕鬆的態度自學程式語言,如果你喜歡,麻煩留言說聲文章讚讚吧! 上節介紹到函數的概念,我們說函數就像是一台有功能的機器,在數學函式庫中,裡面的函數恰好能展現此一概念,故此節介紹 cmath。 cmath 語法: 1#include <cmath> 有關其函數,列下表: 序號 函數 1 double cos(double); 2 double sin(double); 3 double tan(double); 4 double log(double); 5 double pow(double, double); 6 double hypot(double, double); -> 註:畢氏定理計算斜邊公式(根號a平方+b平方) 7 double sqrt(double); -&...
【C++ 筆記】函數(Function)(上) - part 7
【C++ 筆記】函數(Function)(上) - part 7 很感謝你點進來這篇文章。 你好,我並不是什麼 C++、程式語言的專家,所以本文若有些錯誤麻煩請各位鞭大力一點,我極需各位的指正及指導!!本系列文章的性質主要以詼諧的口吻,一派輕鬆的態度自學程式語言,如果你喜歡,麻煩留言說聲文章讚讚吧! 函數(Function) “A function is a block of code which only runs when it is called.”。 :::success 「函數只能被呼叫來執行一個程式碼區塊。」 ::: 什麼意思呢?就好比函數是一台機器,這台機器是具有輸入、輸出的概念的,假設一台機器是具有功用性的,比如說自動販賣機,功能就是給錢吐飲料。所謂的函數其實就是一台具有功能的機器。 可以輸入參數給函數,也可以設定輸出給函數。 參數可以按照剛才的例子,想成是錢,輸出則是吐飲料。 接下來進入到 C++ 的函數世界,語法如下: 1234return_type function_name( parameter list ){ body of the fun...
【演算法筆記】計數排序 / 桶排序 / 基數排序
【演算法筆記】計數排序 / 桶排序 / 基數排序 大家好我是 LukeTseng!這篇是我的一個小小學習筆記,為了想要了解更快速的排序法,所以特別製作了此篇。 在總結部分會將這三種排序法的各個優缺點,以及其他屬性等等做比較。 總之廢話不多說,進入正題吧: 計數排序法(Counting Sort) 計數排序法(Counting Sort)是一個有線性時間成長的排序法,相較於以往較為基礎的泡沫排序法(Bubble Sort)、插入排序法(Insertion Sort)(時間複雜度:O(n^2))等,或是適用於大資料且排序速度較快的排序法:快速排序法(Quick Sort)、合併排序法(Merge Sort)(時間複雜度:O(n log n)),都還要來得快。 它的時間複雜度是 O(n),如果要準確一點說的話,是 O(n+k),k 是資料量。 適用情況在於資料量少的時候,有多少呢?資料量在幾千個以內,且資料範圍不超過幾百個(例如 1 到 100 或 1 到 500)的時候,計數排序法就仍有效率排序。 計數排序的演算步驟如下: 找出要排序的數列當中之最大值 初始化一個長度為 max+1...
【Lua 筆記】數學函式庫 - 番外
【Lua 筆記】數學函式庫 - 番外 詳情參考自:Lua 5.4 Reference Manual math.abs(x) - 回傳 x 的絕對值。 math.acos(x) - 回傳 x 的反餘弦值(以弧度為單位)。 math.asin(x) - 回傳 x 的反正弦值(以弧度為單位)。 math.atan(x) - 回傳 x 的反正切值(以弧度為單位)。 math.atan2(y, x) - 回傳點 (x, y) 的反正切值(以弧度為單位)。 math.ceil(x) - 回傳不小於 x 的最小整數。(可理解成無條件進位) math.cos(x) - 回傳 x 的餘弦值(x 是以弧度為單位)。 math.cosh(x) - 回傳 x 的雙曲餘弦值。 math.deg(x) - 將角度 x 從弧度轉換為角度。 math.exp(x) - 回傳 e(數學常數) 的 x 次方。 math.floor(x) - 回傳不大於 x 的最大整數。(可理解成無條件退位) math.fmod(x, y) - 回傳 x 除以 y 的餘數。 math.huge - 表示無窮大的值。 math.lo...
【Lua 筆記】物件導向程式設計(Object Oriented Programming,OOP) - part 11
【Lua 筆記】物件導向程式設計(Object Oriented Programming,OOP) - part 11 由於有款遊戲叫做 CSO(Counter-Strike Online),內建模式創世者模式(Studio)新增使用 Lua 及其遊戲的 API,所以突發奇想製作這個筆記。 這個筆記會在一開始先著重純粹的程式設計自學,在最後的章節才會與 CSO 遊戲 API 進行應用。 小提醒:此為本筆記最後一章,恭喜你可以準備結合CSO的API實作了。 物件導向程式設計(Object Oriented Programming,OOP) 物件導向程式設計(Object-Oriented Programming, OOP)是一種程式設計範式,強調使用「物件」來設計軟體和程式碼。物件是具有狀態(屬性)和行為(方法)的實體。OOP 的主要目的是提高程式碼的可重用性、可維護性和可擴展性。 舉個例子:比如我現在正在 coding,用物件導向程式設計的邏輯來看的話,就是如以下表格所示(參考自:何謂物件導向程式設計 - HackMD): 類別(class) 物件名稱(name) 物件屬性...
【Lua 筆記】元表(MetaTable) - part 10
【Lua 筆記】元表(MetaTable) - part 10 由於有款遊戲叫做 CSO(Counter-Strike Online),內建模式創世者模式(Studio)新增使用 Lua 及其遊戲的 API,所以突發奇想製作這個筆記。 這個筆記會在一開始先著重純粹的程式設計自學,在最後的章節才會與 CSO 遊戲 API 進行應用。 元表(MetaTable) 在 Lua table 中我們可以存取到對應的 key 來得到 value 值,但是卻無法對兩個 table 進行運算操作(例如相加)。因此 Lua 提供了元表(MetaTable),允許我們改變 table 的行為,每個行為關聯了對應的元方法。 所以元表(MetaTable)可以讓我們針對 table 進行一些運算操作。 而在對 table 跟 table 之間進行運算的時候,Lua 首先會檢查兩者之間是否存在元表這個東西,例如會檢查是否有 __add 存在,找到的話,則其對應的值(往往是一個函數或是 table)就是"元方法"。 有兩個很重要的函數是專門用來處理元表的: setmetatable...
【Lua 筆記】表(table) - part 9
【Lua 筆記】表(table) - part 9 由於有款遊戲叫做 CSO(Counter-Strike Online),內建模式創世者模式(Studio)新增使用 Lua 及其遊戲的 API,所以突發奇想製作這個筆記。 這個筆記會在一開始先著重純粹的程式設計自學,在最後的章節才會與 CSO 遊戲 API 進行應用。 表(Table) Lua 中的表(table)是一種很強很好用的資料結構,主要有以下幾個特點: Dynamic:table 可以動態地新增或刪除項目(item),無需事先宣告 table 的大小。這讓 table 非常靈活,可以用於各種資料結構,如陣列、字典等。 Key / Value(鍵值對):table 中的資料是以鍵值對的形式進行儲存的。鍵(key)可以是任意型態的值(除了 nil),包括數字、字串或者 table 本身等。值(value)也可以是任意型態的。 Difference:表中可以同時儲存不同型態的值,表示在同一個 table 中可以同時有整數、字串、函數等不同型態的資料。 Index:Lua 中的 table 索引(index)可以是整數或者字...
【Lua 筆記】字串(String) - part 8
【Lua 筆記】字串(String) - part 8 由於有款遊戲叫做 CSO(Counter-Strike Online),內建模式創世者模式(Studio)新增使用 Lua 及其遊戲的 API,所以突發奇想製作這個筆記。 這個筆記會在一開始先著重純粹的程式設計自學,在最後的章節才會與 CSO 遊戲 API 進行應用。 ※本文篇幅較長,十分複雜,請小心閱讀,請務必收藏!!※ 字串(String) 字串(String)是由許多字元(Character)所組成的。 字元(Character):中文字、英文字母(a-z)、底線等等任何符號皆是一種字元。 字串可以用以下三種方式表示: 成對單引號括起來(‘String’) 成對雙引號括起來(“String”) [[ ]] 裡面放字串 -> 多行字串 第三種方式舉例: 123456a = [[Hi, this is a stringaaaaaaaa]]print(a) 輸出結果: 12Hi, this is a stringaaaaaaaa 取得字串長度的另一種方式 string.len(裡面放字串),實際上這個方式與用 # ...
【Lua 筆記】作用域 / 函數 - part 7
【Lua 筆記】作用域 / 函數 - part 7 由於有款遊戲叫做 CSO(Counter-Strike Online),內建模式創世者模式(Studio)新增使用 Lua 及其遊戲的 API,所以突發奇想製作這個筆記。 這個筆記會在一開始先著重純粹的程式設計自學,在最後的章節才會與 CSO 遊戲 API 進行應用。 作用域(scope) 作用域(scope),表示一個變數或函數等能夠作用的範圍,什麼意思呢?請看以下例子: 12a = 10 -- 這是全域變數local a = 50 -- 這是局域變數 lua 當中的變數,沒有在前面加上 local 以外,全部都是「全域變數」,你可以把全域變數想像成是一個到哪裡都可以用的變數。 局域變數就只限縮於"目前"的範圍,什麼意思呢?也就是在變數前面宣告了 local 這個關鍵字,就只有這整個文件可以用這個變數而已,其他的文件不能存取到它的值。(這只是粗淺的解釋,實際上看的是他目前所在的作用域範圍) 具體是何種"目前"的範圍,我們在說明函數的時候稍待說明一下。 函數(function) 函數(fu...
【Lua 筆記】延伸 for 迴圈 - part 6
【Lua 筆記】延伸 for 迴圈 - part 6 由於有款遊戲叫做 CSO(Counter-Strike Online),內建模式創世者模式(Studio)新增使用 Lua 及其遊戲的 API,所以突發奇想製作這個筆記。 這個筆記會在一開始先著重純粹的程式設計自學,在最後的章節才會與 CSO 遊戲 API 進行應用。 for in 迴圈 for 迴圈分為兩類: for do 迴圈 for in do 迴圈 之前我們說的 for 都是 for do 迴圈。 今天來談 for in do 這個迴圈,它主要是用來迭代陣列或表的。可以分別用 ipairs、pairs 進行處理。 迭代陣列值 範例來源:【30天Lua重拾筆記13】基礎2: 控制-for迴圈 - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天 12345array = {"one", "two", "three"}for i, v in ipairs(array) do print(i, v)end 輸出結果: 1231 o...
【Lua 筆記】陣列 - part 5
【Lua 筆記】陣列 - part 5 由於有款遊戲叫做 CSO(Counter-Strike Online),內建模式創世者模式(Studio)新增使用 Lua 及其遊戲的 API,所以突發奇想製作這個筆記。 這個筆記會在一開始先著重純粹的程式設計自學,在最後的章節才會與 CSO 遊戲 API 進行應用。 陣列(Array) 我們先來看看 Lua 的陣列長怎樣: 1myArray = {10, 20, 30, 40, 50} 陣列(Array),用兩個大括號 {} 將資料圍起來,在 Lua 當中並沒有給它特定的資料型態,而是被一個稱為 table(表)的資料型態所包圍起來。 所以 type(myArray) 輸出結果會是 table: 12myArray = {10, 20, 30, 40, 50}print(type(myArray)) --> table :::danger 切記:Lua 的陣列索引從 1 開始。也可以自定義從 0 開始,等下會說怎麼做。 ::: 回歸到問題本身,各位可能仍然還會疑惑的一點是,...



