通過指針輕松實現多個數據排列
發(fā)布時間:2024-04-03 14:47 [ 我要自學網原創(chuàng) ] 發(fā)布人: 快樂小女 閱讀: 476

PLC編程時,經常會使用多個數據,在這些數據中找到想要的數據就變得非常困難了。就像我們在茫茫人海中要尋找那個“她”,該去哪尋找?那有沒有簡單的方法去實現這個復雜的任務呢?那這時候,我們就要考慮使用間接尋址的方式了,也就是我們通常所說的指針。話不多說我來一個示例吧!

t比如對下面這個序列進行從小到大排序: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

到此第一輪就比較完了。第一輪的結果是找到了序列中最大的那個數,并浮到了最右邊。比較時,每輪中第 n 次比較是新序列中第 n 個元素和第 n 1 個元素的比較(假如 n 從 1 開始)。

第二輪:

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

到此第二輪就比較完了。第二輪的結果是找到了序列中第二大的那個數,并浮到了最右邊第二個位置。

第三輪:

1) 21 和 –58 比,21>–58,則它們互換位置:-58,21,34,90,132

2) 21 和 34 比,21<34,則不用交換位置:-58,21,34,90,132
到此第三輪就比較完了。第三輪的結果是找到了序列中第三大的那個數,并浮到了最右邊第三個位置。

第四輪:

1) –58 和 21 比,–58<21,則不用交換位置。
至此,整個序列排序完畢。從小到大的序列就是“–58 21 34 90 132”。從這個例子中還可以總結出,如果有 n 個數據,那么只需要比較 n–1 輪。而且除了第一輪之外,每輪都不用全部比較。因為經過前面輪次的比較,已經比較過的輪次已經找到該輪次中最大的數并浮到右邊了,所以右邊的數不用比較也知道是大的。

至此,整個順序的排列我們就做完了,這種排序方法我們稱為冒泡排序法。這種方法的原理是; 從左到右,相鄰元素進行比較。每次比較一輪,就會找到序列中最大的一個或最小的一個。這個數就會從序列的最右邊冒出來。
以從小到大排序為例,第一輪比較后,所有數中最大的那個數就會浮到最右邊;第二輪比較后,所有數中第二大的那個數就會浮到倒數第二個位置……就這樣一輪一輪地比較,最后實現從小到大排序。

t接下來,我們就用程序表達出這種冒泡法的思維,其中五個數據進行四輪排序,需要使用一個FOR循環(huán)語句,而每一輪的排序需要進行不同次數的比較,所以也需要使用FOR循環(huán)語句。而這兩個FOR語句是嵌套關系。

現在往VW0,VW2,VW4,VW6,VW85個地址中存放5個數據90 , 21 , 132 , -58 , 34,然后進行從小到大是順序排列

子程序(SBR_0


主程序(MAIN

 

當主程序M0.0接通,子程序程序解讀:

程序段1:

VW20為要循環(huán)的輪次,5個數據,4輪即可

VW22則為每輪需要比較的次數

程序段2

使用外循環(huán)FOR,循環(huán)次數存儲在VW24中,循環(huán)的輪次次數為4(VW20

程序段3

創(chuàng)建指針VD100及查找第一個數據

程序段4

使用內循環(huán)FOR,循環(huán)次數為4。

程序段5

指針VD1002存入VD104,則VD104指向VB2的起始地址。

程序段6

判斷*VD104VW2)的數據與*VD100VW0)的數據,當VW2的數據小與VW0的數據則交換位置。

所以此時的數據是21 , 90 , 132 , -58 , 34。

程序段7

指針VD1002,指針指向VB2為起始的地址。

程序段9:

總的次數減1,VW22等于3

接下來,程序跳轉到程序段4,循環(huán)次數為3次,因為前兩個數據比較完了,進行后4個數據比較只需要比較3次。

程序段5中的VD100在上一個循環(huán)已經指向了VB2開始的地址,在這個循環(huán)是加上2則VD104的數據指向VB4開始的地址。程序段6中*VD104VW4)的數據與*VD100VW2)的數據進行比較得到依次再循環(huán)。

結束語:從左到右,相鄰元素進行比較。每次比較一輪,就會找到序列中最大的一個或最小的一個。這個數就會從序列的最右邊冒出來。整個程序的邏輯是把大的數據往后挪,挪完只后即可找到相對較大的數據。

S7-1200SCL入門基礎教程
我要自學網商城 ¥40 元
進入購買
文章評論
0 條評論 按熱度排序 按時間排序 /350
添加表情
遵守中華人民共和國的各項道德法規(guī),
承擔因您的行為而導致的法律責任,
本站有權保留或刪除有爭議評論。
參與本評論即表明您已經閱讀并接受
上述條款。
V
特惠充值
聯系客服
APP下載
官方微信
返回頂部
分類選擇:
電腦辦公 平面設計 室內設計 室外設計 機械設計 工業(yè)自動化 影視動畫 程序開發(fā) 網頁設計 會計課程 興趣成長 AIGC