Posts

Showing posts from November, 2023

implement a SwapAndAdd function exam questions

 以下的 C 程式碼需要實作一個 SwapAndAdd function。SwapAndAdd()要達成 的功能是交換兩個變數,然後建立一個新的整數變數,將兩個變數相加存在該變數 之後,回傳新的變數位址讓呼叫端來使用。以下的 main()顯示如何使用這個 SwapAndAdd() function。 int main() { int x, y, *result ; x = 100 ; y = 50 ; result= SwapAndAdd(......); // 請填寫參數 x,y 應如何傳遞來使用 SwapAndAdd printf(“%d %d %d”, x, y,(*result)); } 在這個 main()中,我們會將 x,y 變數作為參數傳到 SwapAndAdd()。如果 SwapAndAdd()實作正確,這個 main()會印出 50 100 150 請以 C 語言完成 SwapAndAdd()的程式碼,並且將 main()當中的呼叫參數填入。(25 分 我的回答 函式使用堆疊動態變數(stack dynamic variable),會自動分配或釋放其區域變數記憶體。所以不能使用堆疊動態變數來儲存運算結果,可以用靜態變數(static variable)或者外顯堆積動態變數(explicit heap dynamic variable)。 下列程式碼運行在 Online C Compiler - online editor (onlinegdb.com) (一)使用靜態變數 靜態變數的特性為程式預先指派變數記憶體,在程式結束後才釋放記憶體。優點是可以在函式之間保留狀態,缺點是可能占用記憶體。 #include <stdio.h> int* SwapAndAdd(int * x, int* y){     int t=0;     t=*x;     *x=*y;     *y=t;     static int r=0;     r=*x+*y;     return &r; } int main() { int x, y, *result ; x = 100 ; y = 50 ; result= SwapAndAdd(&x,&y); // 請填寫參數 x,y 應如何傳遞來使用 SwapAndAdd prin

object ouput exam questions

 物件輸出考題 下面 JAVA 程式當輸入 0 或 1 時,請問其輸出分別是什麼

objects comparation exam questions

 物件比較考題 下面 JAVA 程式輸出是什麼? 觀念 A.equal(B)  比較內容 判斷兩個具有不同參考的物件是否指向相同的值 A==B 比較物件是否相同

What is the relationship between the two categories of "IS-A" and "HAS-A".

 “is-a”、“has-a”兩種類別的關係是甚麼 JAVA 程式設計中,有“is-a”、“has-a”兩種類別的關係,請分別解釋之,並請分別寫 出其 JAVA 程式框架。(16 分 在Java编程中,有两种常见的类之间的关系,分别是"is-a"关系和"has-a"关系,它们用于描述不同类型的类之间的联系。 1. "is-a"关系(继承关系):    - "is-a"关系也称为继承关系,它表示一个类是另一个类的子类或派生类。    - 这种关系通常在类的层次结构中使用,其中一个类继承另一个类的属性和方法,以便重用和扩展功能。    - 在"is-a"关系中,子类继承了父类的特性,因此子类可以被视为是父类的特定类型。    - 例如,如果有一个类Animal,可以创建子类如Dog和Cat,这些子类都是Animal的子类,因为它们都是动物。    Java框架示例:    ```java    class Animal {        // 公共属性和方法    }    class Dog extends Animal {        // Dog类继承了Animal类,是Animal的子类    }    class Cat extends Animal {        // Cat类也继承了Animal类,是Animal的子类    }    ``` 2. "has-a"关系(组合关系):    - "has-a"关系表示一个类包含其他类的对象作为其属性。    - 这种关系通常用于描述类之间的组合或包含关系,其中一个类具有另一个类的实例作为其一部分。    - 在"has-a"关系中,一个类不是另一个类的子类,而是将其包含为组件的一部分。    - 例如,一个Car类可以包含Engine和Wheel类的对象作为其属性。    Java框架示例:    ```java    class Engine {        // 引擎类    }    class Wheel {        // 轮胎类    }    class Car {        private Engine engine; 

loop exam questions

 迴圈考題 int c=1;請問下列迴圈內 A 的指令會個別執行幾次

what's parse tree

Image
 剖析樹(parse tree) - 根據一語言的文法(BNF;Backus–Naur form)描述,將此語言某一語句(statement)之語法結構,以階層式樹狀結構來表示。 - y=f(x),x是某語言的語句(statement),Y是剖析樹,f(T)函數是BNF 文法 - 每一步推論最左(右)邊的非終端節點 left(right)-most derivation sequence 不明確文法(ambiguous grammar) - 語言某一語句(statement),依文法推導可得到兩顆或以上的剖析樹,稱該文法模糊 文法定義 一個文法G可以定義為G=(Vn,Vt,S,P) Vn 非終端節點的集合 (nonterminal symbol),如{<assign>,<expr>,<id>} Vt終端節點的集合 (terminal symbol),如{A,B,C} S 開始符號集合(starting symbol),如{<assign>} P 產生規則集合(production rule) 考題 一、根據下列文法,其中非終端(non-terminal)以< >符號標示: <S> → <A> <A> → <A> + <A> | <ID> <ID> → w | x | y | z 請畫出 x+y+x 所對應之剖析樹(parse tree)。(10 分) 請問此文法是否模糊(ambiguous)?請說明。(10 分 答案 (一) (二) 文法為模糊。因為某語言之語句x+y+x可轉換為兩或兩棵以上剖析樹。 (一)為第一棵剖析樹,下面為第二棵。 下面為chatgpt的回答 下面是字符串"x+y+x"所对应的解析树(parse tree): ```    <S>     |    <A>     |    <A>    /|\   x + <A>        |       <A>        |       <ID>        |        x ``` 在这个解析树中,<S>(开始符号)扩展为<A>,然后再

Various programming language definitions

 各種程式語言定義 程式語言 - Object-Oriented languages(物件導向語言):   + 定義:這些語言的主要特點是使用物件作為資料的基本單元,通過物件之間的相互關係實現複雜的程式邏輯。Object-Oriented languages將資料和相關操作封裝到物件中,並支援繼承和多型等物件導向特性。   +我的回答:以物件為基本單元,物件中包含屬性與方法,透過物件之間的互動完成複雜的操作。並支援封裝、繼承、多型等物件導向特性。有助於模組化與重用程式碼。  +現存語言:Java, C#(,c++) - Functional languages(函數式語言):   + 定義:這些語言的主要特點是強調使用純函數和不可變性。它們不依賴於狀態,函數是不可變的,並且通常不會改變傳遞給它們的參數的狀態。函數式語言通常具有高階函數和閉包,支援遞迴和高階函數。 主要特點是強調使用純函數和不可變性。純函數,即把所有資料變成參數或內部狀態(資料)的函式。不可變性,則是不會改到資料本身。通常支援高階函數。 純函數,把所有資料變成參數或內部狀態(資料)的函式。 不可變性,不會改到資料本身。 高階函式 Higher-order function定義:一個能夠接收函式作為參數(這個被接收的函式稱為回調函式)或者將函式作為返回值輸出的函式,滿足其中之一即可  +現存語言:Haskell, Scala - Logic languages(邏輯語言):   +定義:這些語言 基於邏輯推理和規則 。Prolog是一個常見的邏輯語言,它用於知識表示和符號推理。Logic languages通常 用於人工智慧和專家系統等領 域。  +現存語言:Prolog, Mercury - Script languages(腳本語言):   +定義:這些語言通常用於自動化任務和快速開發。它們 具有解釋性質,通常用於網頁開發、系統管理 、數據處理等應用。JavaScript、Python和Ruby都是常見的腳本語言。  +現存語言:Javascript, python - 最近語言的發展中,像 Functional languages 與 Script languages,都逐漸引進物件導向性質(OO),就這兩類語言,各舉一個近來發展出且具有 OO 性質的語言。 - JavaScript:Java

Create an AVL tree for the data

Image
給資料建立AVL樹   資料 20、30、10、50、60、40、45、5 請建立成一棵 AVL 樹,(6 分)請依序 刪除 60 及 30,在推導過程需註明旋轉的類別。(6 分 首先,建立一棵 AVL 樹並插入給定的資料:20、30、10、50、60、40、45、5。 AVL 樹的平衡操作包括旋轉,這些旋轉有LL旋轉、LR旋轉、RR旋轉和RL旋轉。 1. 插入 20,樹變成: ```        20 ``` 2. 插入 30,樹變成: ```        20         \          30 ``` 3. 插入 10,需要進行旋轉(RR旋轉),樹變成: ```        20         \          30         /        10 ``` 4. 插入 50,樹變成: ```        20         \          30         /  \        10   50 ``` 5. 插入 60,需要進行旋轉(LL旋轉),樹變成: ```        30       /  \      20   50     /    /  \    10   40   60 ``` 6. 插入 40,需要進行旋轉(LR旋轉),樹變成: ```        30       /  \      20   50     /    /  \    10   40   60              /            45 ``` 7. 插入 5,需要進行旋轉(RR旋轉),樹變成: ```        30       /  \      20   50     /    /  \    10   45   60         /        40 ``` AVL 樹現在已經平衡了。 接下來,我們依序刪除節點 60 和 30: 刪除 60: ```        30       /  \      20   50     /    /  \    10   45   -         /        40 ``` 刪除 30,需要進行旋轉(LL旋轉): ```        40       /  \      20   50     /    /      10   45    ```

Problems with the use of the Bayesian classifier

Image
貝氏分類器的使用問題 【Day 11】貝氏分類器Naive Bayes Classifier - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天 (ithome.com.tw)   三、一個動物分類資料庫如下表。“Name”為動物名稱,“Give Birth”,“Can Fly”,“Live in Water”,“Have Legs”是四個屬性,最後一欄為類別(Class)。 請 使 用 naïve Bayes 方 法 來 計 算 與 預 測 一 筆 測 試 資 料 其 屬 性 為 “Give Birth” = Yes,“Can Fly” = no,“Live in Water” = Yes,and “Have Legs” = no 的類別。此方法在分類上容易因資料不足造成何種問題? (20 分

Modify the binary search method

修改二元搜尋法   二元搜尋法(binary search)使用 divide-and-conquer(分而治之)演算法 技巧,對一個已排序的(sorted)且長度為 n 的陣列 A[0:n1],以二元化 方 式 進 行 資 料 值 x 的 搜 尋 , 其 最 差 時 間 複 雜 度 ( worst case time complexity)可降到(log n)。請使用 C++或 Python 語言,修改此二元 搜尋法,使其能對未排序的(unsorted)且長度為 n 的陣列 A[0:n1],進 行三元化搜尋,即以 divide-and-conquer 技巧將此陣列切成三個子陣列, 並在可能包含資料值 x 的子陣列繼續進行 divide-and-conquer 技巧的搜 尋,如果找到則回傳 1,如果找不到則回傳 0。(17 分)(注意:請寫一 個 searching 類別,內含一個 search 功能)請分析修改後的三元化搜尋 法其最差時間複雜度(worst case time complexity)以 order 的方式表示。 (8 分)(注意:不可將此陣列數值進行排序,請加註解說明程式碼作法。 以下是 Python 語言的程式碼,其中 searching 類別內含一個 search 函數,可以對未排序的陣列進行三元化搜尋: class searching:     def search(self, arr, x):         return self.ternary_search(arr, 0, len(arr) - 1, x)     def ternary_search(self, arr, l, r, x):         if r >= l:             mid1 = l + (r - l) // 3             mid2 = r - (r - l) // 3             if arr[mid1] == x:                 return 1             if arr[mid2] == x:                 return 1             if x < arr[mid1]:                 return self.ternary