★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公眾號:山青詠芝(shanqingyongzhi)
➤博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/ )
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/9697783.html
➤如果鏈接不是山青詠芝的博客園地址,則可能是爬取作者的文章。
➤原文已修改更新!強烈建議點擊原文地址閱讀!支持作者!支持原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
一、LabVIEW中條件結構使用起來並不是那么簡便,主要體現在兩點:
1、由隧道的產生引起的一些問題。(當箭頭停留在隧道處時不顯示為“自動索引隧道”,所以此隧道非彼隧道)
2、由多層結構判斷引起的不易修改、易讀性差的問題。
二、由隧道的產生引起的一些問題。
1、當條件結構中的數據賦值到條件結構外面的時候,就會產生隧道。
2、隧道的作用:在該處相當於一個臨時寄存器。所謂“臨時寄存器”就是無論這個條件結構是真分支或者假分支,,條件結構的數值都要先傳遞到這個隧道,然后由這個隧道傳遞到條件結構的外面,例如由顯示控件顯示。這個隧道必須是:無論真分支還是假分支,無論這個分支是否執行一定代碼,都必須有數值來賦值給這個隧道。但在C語言或者C#中不需要對假分支進行賦值,也即else可以有也可以沒有。
3、沒有LabVIEW代碼的分支可以采用默認設置:
(1)、選中隧道右鍵>未連接時使用默認
(2)、數值類型默認值是0,布爾類型的默認值是False,字符串類型的默認值是空字符串。
(3)、“未連接時使用默認”是相對於所有分支而言的,並不是指要在特定分支設置。
(4)、只有if沒有else的語句,無論嵌套多少層條件結構,其產生隧道都設置為“未連接時使用默認”,對於多分支選擇的情況,把有代碼內容的分支寫好后,即可把產生的隧道設置為“未連接時使用默認”。
4、如果不使用隧道,直接將顯示控件放入條件結構中。
缺點:對於多層嵌套條件結構,只對該層條件結構中的控件起作用,其他層的控件會顯示上一次的顯示結果,不會進行默認值賦值,這可能會在程序或項目研究中引起一些問題。但應根據實際情況選擇適合的形式進行編程,因為有時可能需要這樣的效果。
三、由多層結構判斷引起的嵌套層不易修改、易讀性差的問題。
解決方法:將判斷條件結果組合成一個布爾值,再將布爾數組轉換為對應不同情況下的布爾數值,將數值連接到條件結構,設定好相應分支的數值。
1、程序框圖右鍵>比較>判定范圍並強制轉換,讓每個條件生成一個布爾值。
“判定范圍並強制轉換”函數:依據上限和下限,確定x是否在指定的范圍內,還可選擇將值強制轉換至范圍內。只在比較元素模式下進行強制轉換。如所有輸入都是時間標識值,該函數接受時間標識。用戶可更改函數的比較模式。連線板可顯示該多態函數的默認數據類型。
2、前面板右鍵>“數組、矩陣與簇”>數組。或由程序框圖中創建顯示控件得到。
將判斷條件獲得的布爾值組合成數組。
3、程序框圖右鍵>布爾>布爾數組至數值轉換
“布爾數組至數值轉換”函數: 使用布爾數組作為數字的二進制表示,使布爾數組轉換為整數或定點數。如數字有符號,LabVIEW可使數組作為數字的補數表示。數組的第一個元素與數字的最低有效位相對應。例如,如連線含兩個元素的布爾數組至該函數,兩個元素都不為TRUE時,該函數返回0;如第一個元素的布爾值為TRUE,函數返回1;如第二個布爾值為TRUE,函數返回2;如兩個元素均為TRUE,函數返回3。
4、如果其中一個為1,則其他為0,注意是否還有一種特例的情況:是全部為0。分支結果則有0,1,2,4,8,16,……等等這樣的2的N次方的結果分支。各分支可以按照順序獲得,例如有三個條件,從上往下第二個條件是1,則其它條件是0,將數組從下往上得到的二進制就是010.即為條件分支為2的那個分支,以此類推。
