# U4.1、 練習寫程式 ###### tags: `ALG 101` `JavaScript` `2020七月第三週` `進度筆記` `Lidemy心得` `7/19` --- ## 虛擬碼到程式碼 看懂題目 > 虛擬碼 > 看別人寫好的程式 > 虛擬碼轉到程式碼 。 虛擬碼寫得好,轉 code 就順。 ### 陣列加總 ``` let sum = 0 for(i from 0 to n-1)do sum+= arr[i] end for (區塊) print sum ``` 宣告變數 0 , 讓 i 元素從 0 跑到 n-1 (順著跑) , 0 = 0 + 陣列的元素一直加到 n-1 個,結束,印出。 ``` let sum = 0 for(let i=0; i<n; i++) { //等於 for(let i=0; i<=n-1; i++) { sum+=arr[i] } console.log(sum) ``` ### 找最大值 預設陣列有元素(輸入範圍)。 一個區塊一個區塊翻譯 , for 到 end for , if 到 if : ![](https://i.imgur.com/yM3o2Vf.png) 左虛擬碼; 右邊程式碼。 --- ** 圖片均為上課教材中所擷取供本人學習使用。 --- # U4.2、 函式填空 ###### tags: `ALG 101` `JavaScript` `2020七月第三週` `進度筆記` `Lidemy心得` `7/20` 起承轉合。 先寫架構,再寫細節。 可以避免雙層迴圈(之後會用)。 --- ## [LIOJ 1020:判斷質數](https://oj.lidemy.com/problem/1020) 如果有出現 2 3 5 7 , 除了 1 和該數自身外,無法被其他自然數整除的數 (by wiki) 。 合數(Composite) , 質數(Prime) 。 ### 加 function ~ ``` for(i from 0 to n-1) do if(arr[i] is Prime) do print 'Prime' else print 'Composite' end if end for ``` ### 簡化問題,函式放進去: 主要邏輯。 印出陣列裡的質數。 ``` for(let i=0; i<n; i++) if(isPrime(arr[i])) { console.log('Prime') { } else { console.log('Composite') } } function isPrime(n) { } ``` ### 判斷質數邏輯: 如果從 2 到 n-1 都沒有數字可以整除,就是質數。 輔助函式。 ``` function isPrime(n) { if(n===1) return false for(let i=2; i<n; i++) { if(n%i===0) { return false } // 不要直接 else return true ; } return true //如果前面都沒有 return 就是質數。 } ``` ### 加起來: ``` for(let i=0; i<n; i++) { if(isPrime(arr[i])) { console.log("Prime") } else { console.log("Composite") } } function isPrime(n) { if(n===1) return false for(let i=2; i<n; i++) { if(n%i===0) { return false } // 不要直接 else return true ; } return true //如果前面都沒有 return 就是質數。 } ``` 函式填空法可以切割問題。 --- ### 雙層迴圈 ``` for(let i=0; i<n; i++) { let isPrime=true if(arr[i]===1) { // edgecase ; 如果從這 → isPrime=false } for(let j=2; j<arr[i]; i++) { if(arr[i]%j===0) { isPrime=false break } } if(isPrime) { console.log('Prime') { } else { console.log('Composite') } } // ← 到這都沒有符合,就是質數; function isPrime(n) { if(n===1) return false for(let i=2; i<n; i++) { if(n%i===0) { return false } // 不要直接 else return true ; } return true //如果前面都沒有 return 就是質數。 } ``` ![](https://i.imgur.com/84S008x.png) ### 加 function 加很多 ![](https://i.imgur.com/3OgdbbQ.png) --- ** 圖片均為上課教材中所擷取供本人學習使用。 --- # U4.3、 簡化法 ###### tags: `ALG 101` `JavaScript` `2020七月第三週` `進度筆記` `Lidemy心得` `7/21` 從句子開始,難的解不出來先解簡化版的。 大問題變小問題。 --- [LIOJ 1021:好多星星](https://oj.lidemy.com/problem/1021) 如果寫不出很多個 N ! 那可以先從一個開始。 ``` for(let i = 1; i<=n; i++){ console.log('*') } ``` 搭配函式填空法: ``` for(let i = 1; i<=n; i++){ printStar(i) } function(printStar(n)) { } ``` 問題簡化成如何印出 n 個星星。 再用迴圈加上星星: ``` for(let i = 1; i<=n; i++){ printStar(i) } function(printStar(n)) { let s = '' for(let i=1; i<=n; i++) { s+='*' } console.log(s) } ``` # U4.4、 Loop, function, if ###### tags: `ALG 101` `JavaScript` `2020七月第三週` `進度筆記` `Lidemy心得` `7/21` 迴圈、函式、判斷式。 --- ## 用內建函式 `array.map()` `array.filter` `array.reduce` 去解 ? 如果能用內建函式解,一定也能用迴圈、函式、判斷式解,可以實做出來。 ---