樹心幽徑

20200131用JavaScript將文字盒中的大地座標轉為 kml 或 gpx 航跡檔
2020/01/31,19:50

 

(1)JS網頁程式碼:js2kmlgpx.txt下載 (5 KB) | created 01 二月, 2020

js2kmlgpx.txt檔案下載後將txt副檔名改為htm副檔名即可用firefox瀏覽器開啟並使用之。

 

(2 )產生KML航跡檔文字的執行結果並提供kml檔下載,可選用GOOGLE-EARTH開啟。

alt

 

(3 )產生GPX航跡檔文字的執行結果並提供gpx檔下載,可選用MapSource或BaseCamp開啟。

alt

 

REF: 20200124安裝魯地圖、MapSource、BaseCamp、GoogleEarth並用LIBRE-OFFICE 的CALC試算表及notepad記事本來製作伊加之蕃的kml及gpx航跡檔

20200124安裝魯地圖、MapSource、BaseCamp、GoogleEarth並用LIBRE-OFFICE 的CALC試算表及notepad記事本來製作伊加之蕃的kml及gpx航跡檔
2020/01/24,17:16

 

 

 

()下載並安裝Taiwan TOPO 魯地圖:

(1-0)魯地圖 Taiwan TOPO網站下載Install_MOI_Taiwan_TOPO_camp.exe 並執行之。

下載網址: http://rudy.basecamp.tw/Install_MOI_Taiwan_TOPO_camp.exe (186MB)

(1-1)魯地圖TaiwanTopo的圖資預設安裝的資料夾在C:\Taiwan_TOPO\MOI_Taiwan_TOPO_camp

(目前版本是v2020.01.09)

(1-2) 安裝在C:\Taiwan_TOPO\MOI_Taiwan_TOPO_camp 110個圖資檔案列表如下:


 C:\Taiwan_TOPO\MOI_Taiwan_TOPO_camp 的目錄

2020/03/27 下午 09:20 74,738 4118.TYP

2020/03/27 下午 09:20 7,380,992 41180001.img

2020/03/27 下午 09:20 1,480,704 41180002.img

2020/03/27 下午 09:20 2,004,992 41180003.img

2020/03/27 下午 09:20 1,641,472 41180004.img

2020/03/27 下午 09:20 1,837,056 41180005.img

2020/03/27 下午 09:20 2,363,392 41180006.img

2020/03/27 下午 09:20 1,511,424 41180007.img

2020/03/27 下午 09:20 1,346,560 41180008.img

2020/03/27 下午 09:20 1,404,928 41180009.img

2020/03/27 下午 09:20 8,646,656 41180010.img

2020/03/27 下午 09:20 4,179,968 41180011.img

2020/03/27 下午 09:20 2,146,304 41180012.img

2020/03/27 下午 09:20 2,496,512 41180013.img

2020/03/27 下午 09:20 1,702,912 41180014.img

2020/03/27 下午 09:20 1,743,872 41180015.img

2020/03/27 下午 09:20 1,747,968 41180016.img

2020/03/27 下午 09:20 1,949,696 41180017.img

2020/03/27 下午 09:20 1,509,376 41180018.img

2020/03/27 下午 09:20 1,803,264 41180019.img

2020/03/27 下午 09:20 1,767,424 41180020.img

2020/03/27 下午 09:20 1,633,280 41180021.img

2020/03/27 下午 09:20 1,695,744 41180022.img

2020/03/27 下午 09:20 1,622,016 41180023.img

2020/03/27 下午 09:20 2,215,936 41180024.img

2020/03/27 下午 09:20 1,576,960 41180025.img

:

2020/03/27 下午 09:20 1,481,728 41180099.img

2020/03/27 下午 09:20 1,482,752 41180100.img

2020/03/27 下午 09:20 2,039,808 41180101.img

2020/03/27 下午 09:20 1,886,208 41180102.img

2020/03/27 下午 09:20 1,495,040 41180103.img

2020/03/27 下午 09:20 1,951,744 41180104.img

2020/03/27 下午 09:20 18,432 MOI_Taiwan_TOPO_camp.img

2020/03/27 下午 09:20 1,262 MOI_Taiwan_TOPO_camp.mdx

2020/03/27 下午 09:20 16,037 MOI_Taiwan_TOPO_camp.tdb

2020/03/27 下午 09:20 9,449,472 MOI_Taiwan_TOPO_camp_mdr.img

2020/03/27 下午 09:20 356,569 Uninstall.exe

110 個檔案

(1-3)安裝在C:\Taiwan_TOPO\MOI_Taiwan_TOPO_camp 110個圖資檔案

alt

  (1-4)以上img檔的檔案格式解析如: OSM Map On Garmin/IMG File Format

 

()下載並安裝BaseCamp 並用以開啟各式及自製的gpx

(2-1)BaseCamp網站下載BaseCamp_471.exe並執行之。

下載網址:http://download.garmin.com/software/BaseCamp_471.exe (20191030版,約59MB)

(安裝完成重開機才會生效)

(2-2)執行剛裝的BaseCamp並於地圖功能表中選用()所裝的Taiwan TOPO 魯地圖

alt

(2-3)用BaseCamp 匯入「 20190805-10喀西帕南山東南稜未成d4.gpx( 下載點由MapSource所存 )到我的收藏成功

alt

 (2-4)選取你要匯出航點/檔案功能表/匯出/匯出選取項目/可將航跡匯出為CSV檔,詳如檔案20200808D4.csv下載 (272 KB) 及下面二張截圖。

alt

 

alt

()安裝並使用MapSource來自行標定航點

(3-1)安裝Garmin定位器所附的MapSource並再下載安裝MapSource 6.16.3更新程式(要先裝有GARMIN 定位器附的MAPSOURCE)

(3-2)執行MapSource並按CTRL+U選用(1-1)所裝的Taiwan TOPO 魯地圖

alt

(3-3)使用MapSource的航點標定功能自行標定一序列想要去的航點路線(例如下二圖,編輯功能表/偏好設定分別為WGS84TWD67)並複製取得自訂航點的WGS84大地座標及TWD67大地座標。

3a:WGS84大地座標: 編輯功能表/偏好設定/位置/方格座標:經度/緯度 hddd.ddddd/大地座標系統:WGS84 ,本處自訂航點可另存成為文字檔後,再用scalc打開來取得wgs84座標。

alt

alt

 

alt

 

alt

 

3b:TWD67大地座標: 編輯功能表/偏好設定/位置/方格座標:台灣二度分帶 /大地座標系統:Taiwan(TWD67),本處自訂航點可另存為文字檔後,再用scalc打開來取得TWD67座標。

alt

alt

 

alt

alt

()下載並安裝 LibreOffice6.3.5(作業系統 Windows x86_64 )

下載網址:

https://www.libreoffice.org/donate/dl/win-x86_64/6.3.5/zh-TW/LibreOffice_6.3.5_Win_x64.msi

https://zh-tw.libreoffice.org/download

()使用LibreOffice calc電子試算表及notepad記事本來製作gpx航跡檔

(5-0)gpx 檔頭示例

(5-1)gpx航點示例:

alt

(5-2)gpx航跡段示例:

alt

(5-3)gpx 檔尾 示例

alt

 

(5-4) LIBRE-OFFICE CALC製作如下試算表,詳如20200127_0208eplusB.ods下載 (70 KB)

20200127_0208eplusB.ods 試算表的內容欄位如下:

alt

 

(5-4a)上圖scalc試算表中的NAME,twd67,wgs84三欄資料可拷自在MapSource所標定的航點資料。

NAME 欄的值示例(航點名)e00

twd67 欄的值示例:244925 2560594 (依序為x67y67)

wgs84 欄的值示例:N23.14545 E120.95866 (依序為緯度及經度)

 

(5-4b)x67,y67,x97,y97,lon,lat各欄說明如下:

如下x67D2的公式為=MID(B2,1,6) 

如下y67E2的公式為=MID(B2,8,7)

如下x97F2的公式為= D2 + 807.8 + 0.00001549 * D2 + 0.000006521 *E2

如下y97G2的公式為 =E2 - 248.6 + 0.00001549 * E2 + 0.000006521 *D2

如下lonh2的公式為=MID(C2,2,8)

如下lati2的公式為=MID(C2,12,9)

(5-4c)gpxWPT,gpxTrkpt各欄說明如下:

alt

(5-5) 將以上gpxWPTgpxTrkpt二個欄位的內容貼入如下示例gpx(20200417.gpx下載 )的適當位置中即可製作出希望的gpx(20200121伊蕃wptTrk3.gpx下載 )

alt

(5-6)MapSource 開啟(5-5)所製成的20200121伊蕃wptTrk3.gpx(下載)成功如下圖。

alt

(5-7)TWD67TWD97的座標互換公式如下:

x67=x97-807.8-0.00001549*x97-0.000006521*y97;

y67=y97+248.6-0.00001549*y97-0.000006521*x97;

 

x97 = x67 + 807.8 + 0.00001549 * x67 + 0.000006521 * y67;

y97 = y67 - 248.6 + 0.00001549 * y67 + 0.000006521 * x67;


()使用LibreOffice calc電子試算表及notepad記事本來製作kml航跡檔

(6-1)將如下kmlWPTkmlTrkpt二個欄位的內容貼入如下範例kml(20200417.kml下載 )的適當位置中即可製作如下的kml檔: 20200127-0208eplus5.kml 下載 (15 KB)

alt

 

(6-2)kmlWPT,kmlTrkpt各欄公式說明如下:

altalt



()下載並安裝Google Earth 並開啟自製的kmlgpx

(7-1)下載並安裝google earth

(7-2)用google earth 開啟(5-5)所製成的20200121伊蕃wptTrk3.gpx(下載)成功,結果如下圖。

alt

(7-3)用google earth 開啟(6-1)所製成的20200127-0208eplus5.kml( 下載)成功,結果如下圖:

alt

 

(7-4)在google earth CTRL+ALT+A鍵可進行飛行模擬模式察看所有感興趣的地表景觀。

 

()HappyMan地圖瀏覽器下載各式的gpx檔及kml

 

(8-1)firefox 連上https://map.happyman.idv.tw/~mountain/twmap3/

alt

 

()HappyMan地圖產生器利用自製的gpx檔來產生輸出用圖檔。

(9-1) firefox 連上https://map.happyman.idv.tw/twmap/login.php 並用你的FB帳號登入即可。

(9-2)地圖產生器的輸入表單介面如下:

alt

 

(9-3)地圖產生器的輸出的結果畫面如下:

alt

 

(10)20190805-10玉里山登喀西帕南山東南稜未成記錄.odt下載 (26 KB) | created 17 十月, 2019

(11)20190712-20霞喀羅佐藤大霸南馬洋白石大O.odt下載 (28 KB) | created 14 九月, 2019

(12)20180127-0203大南三鬼記錄c.doc下載 (49 KB) | created 19 四月, 2020

資料備妥,路將更為平順寬廣,走起來很篤定,要往那裡走也不會有疑問。

20200112設計第一個Android APP:自訂程式標題、文字物件與按鈕
2020/01/12,11:49

REF1  : https://readandplay.pixnet.net/blog/post/140001110

ref2 : 把APP安裝到手機裡

ref3:新增一個按鈕、加上點擊的事件

ref4:<Android> Button OnClickListener 事件三種做法

ref5:【APP/Android】onClick事件的5種實現方式

 

(1)下載Android Studio  App 開發工具(android-studio-ide-191.6010548-windows.exe)

https://developer.android.com/studio 3.5.3 for Windows 64-bit (718 MB)

(2)安裝完成並啟動IDE/下載各式組件(約573MB)「...COMPONENTS:SDK Tools、Patch Applier、emulator(262MB)、platform(75MB) 、build-tools(38MB)、Intel x86 Emulator Accelerator (HAXM installer)、sources(38MB)...」

:

Downloading https://dl.google.com/android/repository/sdk-tools-windows-4333796.zip
Downloading https://dl.google.com/android/repository/3534162-studio.sdk-patcher.zip
Downloading https://dl.google.com/android/repository/emulator-windows-6110076.zip
Downloading https://dl.google.com/android/repository/platform-tools_r29.0.5-windows.zip
Downloading https://dl.google.com/android/repository/extras/intel/haxm-windows_v7_5_4.zip
Downloading https://dl.google.com/android/repository/platform-29_r04.zip
Downloading https://dl.google.com/android/repository/build-tools_r29.0.2-windows.zip
Downloading https://dl.google.com/android/repository/sources-29_r01.zip
Running Intel® HAXM installer
:

(3-1)「Start a new Android Studio project」:建立新專案/「Creates A New Empty Activity」

(3-2)輸入並設定如下內容:「name: TreeHeartFirst」/「Package name:com.example.treeheartfirst」/「Save Location:C:\Users\treehrt\AndroidStudioProjects\TreeHeartFirst」/「Langauage:java」/「Minimum API level : API 15」

(3-3)syncing :下載gradles distribution

(3-4)下載Kotlin plugins

(3-5)允許存取「OpenJDK Platform binary」

 

(4-1) 點選app/res/layout/下的「activity_main.xml」或「content_main.xml」並修改TextView物件預設的顯示文字.

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="H黑熊問候大家好!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />

(4-2) 點選「app/res/values/strings.xml」並修改app_name如下:

<string name="app_name">Treehrt5:TaiwanBlackBear台灣黑熊</string>
<string name="buttonText">BlackBear!黑熊來了</string>
<string name="buttonOnClickMessage">按了</string> 

(4-3) 點選app/res/layout/下的「content_main.xml」的TextView下加入如下文字:

<Button
 
    android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/buttonText"
   android:onClick="buttonOnClick
/>
(4-4)開啟app/java/[專案id]/MainActivity.java

void buttonOnClick(View view) {
Toast toast = Toast.makeText(this, R.string.buttonOnClickMessage, Toast.LENGTH_SHORT);
toast.show();
}

(5-1)新增ANDROID模擬器:「Open AVD Manger」/CreateVitualDevice/選「Phone: Pixel 3a」/選「Android 10.0」

(5-2)下載並安裝Google Play Intel x86 Atom System Image第8版 (system-images;android-29;google_apis_playstore;x86)API LEVEL: 29  約1.1GB

(5-3) AVD NAME: Pixel 3a API 29

(5-4)按下「Pixel 3a模擬器」旁的執行鈕即可出現執行結果。

alt

 

(6) 如果執行的APP一直卡在「Waiting for Target Device to Come Online」,進行如下操作即可解決:

AVD Manager---Right Click Emulator----Wipe Data----Run App Again


20200109自selldb資料庫的custs資料表選擇要刪除的資料錄來刪除的PHP程式(c3.php)
2020/01/09,09:53

(1)c3.php程式碼:

<body bgcolor=green>
<?php
function exeSQL($con,$sql){
if( $query= mysqli_query($con, $sql) ) {echo " $sql 成功!<br> "; }
else { echo " $sql Failure!<br> "; }     return $query;
}

function dumpTableForDel($table,$con,$bgcolor){
    $sql= "select * from $table";
    $query=exeSQL($con,$sql);
    echo "<table bgcolor=$bgcolor border=7>";
    echo "<tr bgcolor=cyan>";
    $fc= mysqli_num_fields($query) ;
    while ($field = mysqli_fetch_field($query)){
        printf("<td bgcolor=pink>%s", $field->name);
        }
    echo "<td>DEL";
    $rowc=0;
    while ($row = mysqli_fetch_array($query)){
        echo "<tr bgcolor=purple>";
        for ($i=0;$i<$fc;$i++){
            echo  "<td bgcolor=gray>" . $row[$i];
        }
echo "<td><a href=c3.php?id=" . $row[0] .">DEL</a>";
        $rowc++;
}
echo "</table>";
echo "total $rowc records <br><br>";
}
$con = mysqli_connect('127.0.0.1', 'root', 'w??????', 'selldb');
if (!$con) { echo "Error"; exit(); }
$sql = 'set names utf8;';
$query= exeSQL($con,$sql);
dumpTableForDel("custs",$con,"yellow");
$id=$_GET['id'];
if ($id<>NULL){
    $sql="delete from custs where id=$id";
    $query= exeSQL($con,$sql);
    echo "刪掉 id=$id 的資料錄後,custs資料表內容如下<br>";
    dumpTableForDel("custs",$con,"cyan");
}

mysqli_close ($con);
?>
</body>


(2)執行結果:

set names utf8; 成功!
select * from custs 成功!

id name amount tel DEL
10001 小狗 156 08-233375 DEL
10002 小貓 256 08-233375 DEL
10001 小草 1000 08-233375 DEL
10002 天牛 3000 03-933375 DEL
20002 天牛 3000 03-933375 DEL
30002 天牛 3000 03-933375 DEL

total 6 records

delete from custs where id=10001 OK!
刪掉 id=10001 的資料錄後,custs資料表內容如下
select * from custs 成功!

id name amount tel DEL
10002 小貓 256 08-233375 DEL
10002 天牛 3000 03-933375 DEL
20002 天牛 3000 03-933375 DEL
30002 天牛 3000 03-933375 DEL

total 4 records

 

20200108設計PHP函數dumpTable,用來列出selldb資料庫的custs資料表的全部資料錄
2020/01/08,09:26

(1) code : c2.php

<body bgcolor=lightblue>
<?php
function executeSQL($con,$sql){
    if( $query= mysqli_query($con, $sql) ){ echo " [$sql] OK!<br> "; }
    else { echo " [$sql] Failure!<br> "; }
    return $query;
}

function dumpTable($table,$con,$bgcolor){
    $sql= "select * from $table";
    $query= executeSQL($con,$sql);
    echo "<table bgcolor=$bgcolor border=3>";
    echo "<tr>";
    $fc= mysqli_num_fields($query) ;
    while ($field = mysqli_fetch_field($query)){
        printf("<td>%s", $field->name);
    }
    $rowc=0;
    while ($row = mysqli_fetch_array($query)){
        echo "<tr>";
        for ($i=0;$i<$fc;$i++){
            echo  "<td>" . $row[$i];
        }
        $rowc++;
    }
    echo "</table>";
    echo "total $rowc records<br><br>";
}

$con = @mysqli_connect('localhost', 'root', 'w?????', 'selldb');
if (!$con) { echo "Error: " . mysqli_connect_error(); exit(); }
$sql = 'set names utf8;';
 
$query= executeSQL($con,$sql);
dumpTable("custs",$con,"red");
dumpTable("custs",$con,"green");
dumpTable("custs",$con,"blue");
mysqli_close ($con);

?>
</body>

(2)執行結果

[set names utf8;] OK!
[select * from custs] OK!

id name amount tel
10001 小草 1000 08-233375
10002 天牛 3000 082-20488
10003 小吉 5000 24680
10003 小吉 5000 24680
10003 小吉 5000 24680
10003 小吉 5000 24680
10003 小吉 5000 24680
10003 小吉 5000 24680
10003 小吉 5000 24680
10003 小吉 5000 24680
10003 小吉 5000 24680
total 11 records

[select * from custs] OK!
id name amount tel
10001 小草 1000 08-233375
10002 天牛 3000 082-20488
10003 小吉 5000 24680
10003 小吉 5000 24680
10003 小吉 5000 24680
10003 小吉 5000 24680
10003 小吉 5000 24680
10003 小吉 5000 24680
10003 小吉 5000 24680
10003 小吉 5000 24680
10003 小吉 5000 24680
total 11 records

[select * from custs] OK!
id name amount tel
10001 小草 1000 08-233375
10002 天牛 3000 082-20488
10003 小吉 5000 24680
10003 小吉 5000 24680
10003 小吉 5000 24680
10003 小吉 5000 24680
10003 小吉 5000 24680
10003 小吉 5000 24680
10003 小吉 5000 24680
10003 小吉 5000 24680
10003 小吉 5000 24680
total 11 records
20200106用GIMP製作有透明背景的動物圖png檔並在HTML網頁中呈現。
2020/01/06,23:25

(1)製作如下背景透明的動物圖案並存在桌面為wild.png

(1-1)啟動GIMP/按CTRL+N/圖片尺寸寬600、高800/進階「填上/透明」。

(1-2)左上工具區選「鉛筆工具」

(1-3)左上工具區/「前景」挑「紫色」

(1-4)右上「筆刷」挑「最大的實心圓」

(1-5)用滑鼠在工作區繪出一隻紫色線的動物

(1-6)按CTRL+E將工作區匯出到桌面,檔名為wild.png。

 

(2-1)用記事本編寫如下「六行HTML文字」並存檔在桌面為wild.htm

(2-2)用firefox瀏覽wild.htm的結果如下:

alt

 

(3)參考「如下連結文章 http://gimpbasic.blogspot.com/2011/10/210.html 」,用多重選取區的加(SHIFT)減(CTRL)操作及圖樣填滿來產生如下太極圖。

alt

 

20200102用JavaScript設計二分搜尋法bs01.htm
2020/01/02,20:53

REF:20191122用DevC++來編寫循序搜尋法與二分搜尋法程式

 

(1-1)在notepad輸入如下JS程式碼並存檔在桌面為bs01.htm

<script>
var a = [1, 13, 5, 26, 7 , 18 , 9];
a.sort(function(a, b){return a - b;});
document.write("二分搜尋法<br>待搜尋陣列a[]="+a);

bsearch(1);
bsearch(4);
bsearch(18);
bsearch(26);


function bsearch(k){
    document.write("<hr>數字k="+k+"的搜尋結果如下:");
    var L=0;
    var R=a.length-1;
    var M=(L+R)/2;
    while (L<=R){
            document.write("<br> L="+L+" a[L]="+a[L]+", R="+R+" a[R]="+a[R]+", M="+M+" a[M]="+a[M]+"");
            if (a[M]==k) {
            document.write("<br> 找到一筆匹配在 M="+ M + " a[M]="+a[M]);
                break;
            }
            else{
                if (k >a[M]) {
                    L=M+1;
                document.write("<br> k="+k+" > a[M]="+a[M]+" 往大的那一半找 => L="+L+" R=" +R + "<br>");
                    }
                else {
                    R=M-1;
                    document.write("<br> k="+k+" < a[M]="+a[M]+" 往小的那一半找 =>  L="+L+" R=" +R + "<br>");
                    }
            }
            M=(L+R)/2;
        }
       if (L>R) document.write(" <br> 因"+L+"=L  >  R="+R+" => [L,R]的數字區間不存在,故找不到k="+k);
}

</script>

(2) 用firefox開啟bs01.htm,瀏覽結果如下:

二分搜尋法
待搜尋陣列a[]=1,5,7,9,13,18,26


數字k=1的搜尋結果如下:
L=0 a[L]=1, R=6 a[R]=26, M=3 a[M]=9
k=1 < a[M]=9 往小的那一半找 => L=0 R=2

L=0 a[L]=1, R=2 a[R]=7, M=1 a[M]=5
k=1 < a[M]=5 往小的那一半找 => L=0 R=0

L=0 a[L]=1, R=0 a[R]=1, M=0 a[M]=1
找到一筆匹配在 M=0 a[M]=1


數字k=4的搜尋結果如下:
L=0 a[L]=1, R=6 a[R]=26, M=3 a[M]=9
k=4 < a[M]=9 往小的那一半找 => L=0 R=2

L=0 a[L]=1, R=2 a[R]=7, M=1 a[M]=5
k=4 < a[M]=5 往小的那一半找 => L=0 R=0

L=0 a[L]=1, R=0 a[R]=1, M=0 a[M]=1
k=4 > a[M]=1 往大的那一半找 => L=1 R=0

因1=L > R=0 => [L,R]的數字區間不存在,故找不到k=4


數字k=18的搜尋結果如下:
L=0 a[L]=1, R=6 a[R]=26, M=3 a[M]=9
k=18 > a[M]=9 往大的那一半找 => L=4 R=6

L=4 a[L]=13, R=6 a[R]=26, M=5 a[M]=18
找到一筆匹配在 M=5 a[M]=18


數字k=26的搜尋結果如下:
L=0 a[L]=1, R=6 a[R]=26, M=3 a[M]=9
k=26 > a[M]=9 往大的那一半找 => L=4 R=6

L=4 a[L]=13, R=6 a[R]=26, M=5 a[M]=18
k=26 > a[M]=18 往大的那一半找 => L=6 R=6

L=6 a[L]=26, R=6 a[R]=26, M=6 a[M]=26
找到一筆匹配在 M=6 a[M]=26

 

(2-1)在notepad輸入如下JS程式碼並存檔在桌面為bs02.htm

<script>
var a = [1, 13, 5, 26, 7 , 18 , 9];
for (i=0;i<10000;i++) a.push(rand(30000));

a.sort(function(a, b){return a - b;});
document.write("二分搜尋法<br>待搜尋陣列a[]="+a);

bsearch(111);
bsearch(444);
bsearch(1818);
bsearch(2626);

function rand(r){
 var x=Math.random()*r;
 var y=parseInt(x);
 while (a.indexOf(y) >=0) {
    x=Math.random()*r;
    y=parseInt(x);
    }
 return y;
}

function bsearch(k){
    document.write("<hr>數字k="+k+"的搜尋結果如下:");
    var L=0;
    var R=a.length-1;
    var M=parseInt((L+R)/2);
    while (L<=R){
            document.write("<br> L="+L+" a[L]="+a[L]+", R="+R+" a[R]="+a[R]+", M="+M+" a[M]="+a[M]+"");
            if (a[M]==k) {
            document.write("<br> 找到一筆匹配在 M="+ M + " a[M]="+a[M]);
                break;
            }
            else{
                if (k >a[M]) {
                    L=M+1;
                document.write(" 往大的那一半找 ");
                    }
                else {
                    R=M-1;
                    document.write(" 往小的那一半找 ");
                    }
            }
            M=parseInt((L+R)/2);
        }
       if (L>R) document.write("故找不到"+k);
}

</script>

 

(4)用firefox開啟bs02.htm,瀏覽結果如下:

數字k=111的搜尋結果如下:
L=0 a[L]=0, R=10006 a[R]=29999, M=5003 a[M]=14852 往小的那一半找
L=0 a[L]=0, R=5002 a[R]=14850, M=2501 a[M]=7440 往小的那一半找
L=0 a[L]=0, R=2500 a[R]=7437, M=1250 a[M]=3645 往小的那一半找
L=0 a[L]=0, R=1249 a[R]=3644, M=624 a[M]=1808 往小的那一半找
L=0 a[L]=0, R=623 a[R]=1797, M=311 a[M]=868 往小的那一半找
L=0 a[L]=0, R=310 a[R]=866, M=155 a[M]=445 往小的那一半找
L=0 a[L]=0, R=154 a[R]=444, M=77 a[M]=201 往小的那一半找
L=0 a[L]=0, R=76 a[R]=199, M=38 a[M]=87 往大的那一半找
L=39 a[L]=90, R=76 a[R]=199, M=57 a[M]=145 往小的那一半找
L=39 a[L]=90, R=56 a[R]=140, M=47 a[M]=117 往小的那一半找
L=39 a[L]=90, R=46 a[R]=114, M=42 a[M]=104 往大的那一半找
L=43 a[L]=109, R=46 a[R]=114, M=44 a[M]=110 往大的那一半找
L=45 a[L]=111, R=46 a[R]=114, M=45 a[M]=111
找到一筆匹配在 M=45 a[M]=111


數字k=444的搜尋結果如下:
L=0 a[L]=0, R=10006 a[R]=29999, M=5003 a[M]=14852 往小的那一半找
L=0 a[L]=0, R=5002 a[R]=14850, M=2501 a[M]=7440 往小的那一半找
L=0 a[L]=0, R=2500 a[R]=7437, M=1250 a[M]=3645 往小的那一半找
L=0 a[L]=0, R=1249 a[R]=3644, M=624 a[M]=1808 往小的那一半找
L=0 a[L]=0, R=623 a[R]=1797, M=311 a[M]=868 往小的那一半找
L=0 a[L]=0, R=310 a[R]=866, M=155 a[M]=445 往小的那一半找
L=0 a[L]=0, R=154 a[R]=444, M=77 a[M]=201 往大的那一半找
L=78 a[L]=207, R=154 a[R]=444, M=116 a[M]=320 往大的那一半找
L=117 a[L]=321, R=154 a[R]=444, M=135 a[M]=372 往大的那一半找
L=136 a[L]=376, R=154 a[R]=444, M=145 a[M]=415 往大的那一半找
L=146 a[L]=420, R=154 a[R]=444, M=150 a[M]=433 往大的那一半找
L=151 a[L]=435, R=154 a[R]=444, M=152 a[M]=437 往大的那一半找
L=153 a[L]=441, R=154 a[R]=444, M=153 a[M]=441 往大的那一半找
L=154 a[L]=444, R=154 a[R]=444, M=154 a[M]=444
找到一筆匹配在 M=154 a[M]=444


數字k=1818的搜尋結果如下:
L=0 a[L]=0, R=10006 a[R]=29999, M=5003 a[M]=14852 往小的那一半找
L=0 a[L]=0, R=5002 a[R]=14850, M=2501 a[M]=7440 往小的那一半找
L=0 a[L]=0, R=2500 a[R]=7437, M=1250 a[M]=3645 往小的那一半找
L=0 a[L]=0, R=1249 a[R]=3644, M=624 a[M]=1808 往大的那一半找
L=625 a[L]=1812, R=1249 a[R]=3644, M=937 a[M]=2714 往小的那一半找
L=625 a[L]=1812, R=936 a[R]=2712, M=780 a[M]=2233 往小的那一半找
L=625 a[L]=1812, R=779 a[R]=2230, M=702 a[M]=2031 往小的那一半找
L=625 a[L]=1812, R=701 a[R]=2022, M=663 a[M]=1922 往小的那一半找
L=625 a[L]=1812, R=662 a[R]=1920, M=643 a[M]=1860 往小的那一半找
L=625 a[L]=1812, R=642 a[R]=1859, M=633 a[M]=1834 往小的那一半找
L=625 a[L]=1812, R=632 a[R]=1833, M=628 a[M]=1817 往大的那一半找
L=629 a[L]=1821, R=632 a[R]=1833, M=630 a[M]=1822 往小的那一半找
L=629 a[L]=1821, R=629 a[R]=1821, M=629 a[M]=1821 往小的那一半找 故找不到1818


數字k=2626的搜尋結果如下:
L=0 a[L]=0, R=10006 a[R]=29999, M=5003 a[M]=14852 往小的那一半找
L=0 a[L]=0, R=5002 a[R]=14850, M=2501 a[M]=7440 往小的那一半找
L=0 a[L]=0, R=2500 a[R]=7437, M=1250 a[M]=3645 往小的那一半找
L=0 a[L]=0, R=1249 a[R]=3644, M=624 a[M]=1808 往大的那一半找
L=625 a[L]=1812, R=1249 a[R]=3644, M=937 a[M]=2714 往小的那一半找
L=625 a[L]=1812, R=936 a[R]=2712, M=780 a[M]=2233 往大的那一半找
L=781 a[L]=2234, R=936 a[R]=2712, M=858 a[M]=2486 往大的那一半找
L=859 a[L]=2489, R=936 a[R]=2712, M=897 a[M]=2610 往大的那一半找
L=898 a[L]=2611, R=936 a[R]=2712, M=917 a[M]=2668 往小的那一半找
L=898 a[L]=2611, R=916 a[R]=2665, M=907 a[M]=2648 往小的那一半找
L=898 a[L]=2611, R=906 a[R]=2642, M=902 a[M]=2627 往小的那一半找
L=898 a[L]=2611, R=901 a[R]=2626, M=899 a[M]=2616 往大的那一半找
L=900 a[L]=2623, R=901 a[R]=2626, M=900 a[M]=2623 往大的那一半找
L=901 a[L]=2626, R=901 a[R]=2626, M=901 a[M]=2626
找到一筆匹配在 M=901 a[M]=2626


20200120設計可連線LAMP-MYSQL資料庫伺服器並新增資料庫、資料表、資料錄的PHP程式(c1.php)
2020/01/02,13:04

(一)確定LAMP已在WIN10安裝妥當並提供服務,安裝過程詳如:20191224在win10下載、安裝並使用Appserv9.3.0應用程式伺服程式

(二)設計可連線MYSQL並新增資料庫、資料表、資料錄的PHP程式:

(1)在本機用記事本編寫 如下內容並存在c:\appserv\www之中檔名為c1.php

<body bgcolor=LIGHTGREEN>
<?php
function executeSQL($con,$sql){
    if( $query= mysqli_query($con, $sql) ){ echo " [$sql] OK!<br> "; }
    else { echo " [$sql] Failure!<br> "; }
    return $query;
}

$con = mysqli_connect('127.0.0.1', 'root', 'w??????', 'mysql');
if (!$con) { echo "Error"; exit(); }
$sql = 'drop DATABASE selldb;';
executeSQL($con,$sql);

$sql = 'CREATE DATABASE selldb default character set utf8;';
executeSQL($con,$sql);

$sql = 'use selldb;';
executeSQL($con,$sql);

$sql="CREATE TABLE custs (id char(10),name char(20),amount float,tel char(20))";
executeSQL($con,$sql);

$sql = 'set names utf8;';
executeSQL($con,$sql);

$sql="insert into custs(id,name,amount,tel) values ('10001','小狗',156,'08-233375');";
executeSQL($con,$sql);

$sql="insert into custs(id,name,amount,tel) values ('10002','小貓',256,'08-233375');";
executeSQL($con,$sql);

$sql="insert into custs(id,name,amount,tel) values ('10001','小草',1000,'08-233375');";
executeSQL($con,$sql);

$sql="insert into custs (id,name,amount,tel) values ('10002','天牛' ,3000,'03-933375');";
executeSQL($con,$sql);

$sql="insert into custs (id,name,amount,tel) values ('20002','天牛' ,3000,'03-933375');";
executeSQL($con,$sql);

$sql="insert into custs (id,name,amount,tel) values ('30002','天牛' ,3000,'03-933375');";
executeSQL($con,$sql);

$sql= "select id,name,amount,tel from custs";
if( $query= mysqli_query($con, $sql) ){ echo " $sql OK!<br> "; } else { echo " $sql Failure!<br> "; }

while ($row = mysqli_fetch_array($query)){
        echo  $row['id'] . ":" . $row['name'] . ":" . $row['amount'] . "<br>";
}
mysqli_close ($con);

?>

</body>

 

 

(2) 執行c1.php結果如下

[drop DATABASE selldb;] OK!
[CREATE DATABASE selldb default character set utf8;] OK!
[use selldb;] OK!
[CREATE TABLE custs (id char(10),name char(20),amount float,tel char(20))] OK!
[set names utf8;] OK!
[insert into custs(id,name,amount,tel) values ('10001','小狗',156,'08-233375');] OK!
[insert into custs(id,name,amount,tel) values ('10002','小貓',256,'08-233375');] OK!
[insert into custs(id,name,amount,tel) values ('10001','小草',1000,'08-233375');] OK!
[insert into custs (id,name,amount,tel) values ('10002','天牛' ,3000,'03-933375');] OK!
[insert into custs (id,name,amount,tel) values ('20002','天牛' ,3000,'03-933375');] OK!
[insert into custs (id,name,amount,tel) values ('30002','天牛' ,3000,'03-933375');] OK!
select id,name,amount,tel from custs OK!
10001:小狗:156
10002:小貓:256
10001:小草:1000
10002:天牛:3000
20002:天牛:3000
30002:天牛:3000

 

20200102修改lifetype BLOG的summary.php選單
2020/01/02,09:36

(1) $ pwd
/home/webadm/www/lf

 

(2) $ vi templates/summary/header.template
:

<map name="linksmenu" id="linksmenu" title="Navigation">
    <div id="menubar">
        <div id="menu">
          <ul class="menuTop">
             <li class="menuOption"><a href="http://www.kmvs.km.edu.tw">{$locale->tr("kmvsWEB")}</a></li>
             <li class="menuOption"><a href="http://web.kmvs.km.edu.tw/kmvswiki">{$locale->tr("kmvsWIKI")}</a></li>
             <li class="menuOption"><a href="summary.php?op=Summary">{$locale->tr("summary")}</a></li>
             <li class="menuOption"><a href="summary.php?op=Register&amp;start=1">{$locale->tr("register")}</a></li>
             <li class="menuOption"><a href="summary.php?op=PostList">{$locale->tr("posts")}</a></li>
             <li class="menuOption"><a href="summary.php?op=BlogList">{$locale->tr("blogs")}</a></li>
             <li class="menuOption"><a href="summary.php?op=UserList">{$locale->tr("users")}</a></li>
             <li class="menuOption"><a href="http://insecta.idv.tw">{$locale->tr("insecta")}</a></li>
          </ul>
        </div>
    </div>
</map>

 

 
Accessible and Valid XHTML 1.0 Strict and CSS Powered by LifeType