在PLC編程時(shí),經(jīng)常會(huì)使用多個(gè)數(shù)據(jù),在這些數(shù)據(jù)中找到想要的數(shù)據(jù)就變得非常困難了。就像我們?cè)诿CH撕V幸獙ふ夷莻€(gè)“她”,該去哪尋找?那有沒(méi)有簡(jiǎn)單的方法去實(shí)現(xiàn)這個(gè)復(fù)雜的任務(wù)呢?那這時(shí)候,我們就要考慮使用間接尋址的方式了,也就是我們通常所說(shuō)的指針。話不多說(shuō)我來(lái)一個(gè)示例吧!
t比如對(duì)下面這個(gè)序列進(jìn)行從小到大排序:90 , 21 , 132 , -58 , 34
第一輪:
1) 90 和 21比,90>21,則它們互換位置:21,90,132,-58,34
2) 90 和 132 比,90<132,則不用交換位置:21,90,132,-58,34
3)132 和 –58 比,132>–58,則它們互換位置:21,90,-58,132,34
4)132 和 34 比,132>34,則它們互換位置:21,90,-58,34,132
到此第一輪就比較完了。第一輪的結(jié)果是找到了序列中最大的那個(gè)數(shù),并浮到了最右邊。比較時(shí),每輪中第 n 次比較是新序列中第 n 個(gè)元素和第 n 1 個(gè)元素的比較(假如 n 從 1 開(kāi)始)。
第二輪:
1) 21 和 90 比,21<90,則不用交換位置:21,90,-58,34,132
2) 90 和 –58 比,90>–58,則它們互換位置:21,-58,90,34,132
3) 90 和 34 比,90>34,則它們互換位置:21,-58,34,90,132
到此第二輪就比較完了。第二輪的結(jié)果是找到了序列中第二大的那個(gè)數(shù),并浮到了最右邊第二個(gè)位置。
第三輪:
1) 21 和 –58 比,21>–58,則它們互換位置:-58,21,34,90,132
2) 21 和 34 比,21<34,則不用交換位置:-58,21,34,90,132
到此第三輪就比較完了。第三輪的結(jié)果是找到了序列中第三大的那個(gè)數(shù),并浮到了最右邊第三個(gè)位置。
第四輪:
1) –58 和 21 比,–58<21,則不用交換位置。
至此,整個(gè)序列排序完畢。從小到大的序列就是“–58 21 34 90 132”。從這個(gè)例子中還可以總結(jié)出,如果有 n 個(gè)數(shù)據(jù),那么只需要比較 n–1 輪。而且除了第一輪之外,每輪都不用全部比較。因?yàn)榻?jīng)過(guò)前面輪次的比較,已經(jīng)比較過(guò)的輪次已經(jīng)找到該輪次中最大的數(shù)并浮到右邊了,所以右邊的數(shù)不用比較也知道是大的。
至此,整個(gè)順序的排列我們就做完了,這種排序方法我們稱(chēng)為冒泡排序法。這種方法的原理是; 從左到右,相鄰元素進(jìn)行比較。每次比較一輪,就會(huì)找到序列中最大的一個(gè)或最小的一個(gè)。這個(gè)數(shù)就會(huì)從序列的最右邊冒出來(lái)。
以從小到大排序?yàn)槔?,第一輪比較后,所有數(shù)中最大的那個(gè)數(shù)就會(huì)浮到最右邊;第二輪比較后,所有數(shù)中第二大的那個(gè)數(shù)就會(huì)浮到倒數(shù)第二個(gè)位置……就這樣一輪一輪地比較,最后實(shí)現(xiàn)從小到大排序。
t接下來(lái),我們就用程序表達(dá)出這種冒泡法的思維,其中五個(gè)數(shù)據(jù)進(jìn)行四輪排序,需要使用一個(gè)FOR循環(huán)語(yǔ)句,而每一輪的排序需要進(jìn)行不同次數(shù)的比較,所以也需要使用FOR循環(huán)語(yǔ)句。而這兩個(gè)FOR語(yǔ)句是嵌套關(guān)系。
現(xiàn)在往VW0,VW2,VW4,VW6,VW8這5個(gè)地址中存放5個(gè)數(shù)據(jù)90 , 21 , 132 , -58 , 34,然后進(jìn)行從小到大是順序排列
子程序(SBR_0)
主程序(MAIN)
當(dāng)主程序M0.0接通,子程序程序解讀:
程序段1:
VW20為要循環(huán)的輪次,5個(gè)數(shù)據(jù),4輪即可
VW22則為每輪需要比較的次數(shù)
程序段2:
使用外循環(huán)FOR,循環(huán)次數(shù)存儲(chǔ)在VW24中,循環(huán)的輪次次數(shù)為4(VW20)
程序段3:
創(chuàng)建指針VD100及查找第一個(gè)數(shù)據(jù)
程序段4:
使用內(nèi)循環(huán)FOR,循環(huán)次數(shù)為4。
程序段5:
指針VD100加2存入VD104,則VD104指向VB2的起始地址。
程序段
取消
清空記錄
歷史記錄
清空記錄
歷史記錄
取消
清空記錄
歷史記錄
清空記錄
歷史記錄