當前位置:首頁 » 操作系統 » 演算法圖

演算法圖

發布時間: 2022-01-08 11:05:22

Ⅰ 如圖所示的演算法框圖執行後輸出的結果是( ) A. 1 5 B. 2 5 C.

循環前,n=0.2,i=1,
第1次循環,n=0.4,i=2,
第2次循環,n=0.8,i=3,
第3次循環,n=0.6,i=4,
第4次循環,n=0.2,i=5,

可知,n的值循環出現,其周期是4.
當i=2011時不滿足i≤2010,退出循環,輸出的結果為0.8,
故選D.

Ⅱ 請畫出判斷一個數是否是偶數的演算法框圖

Ⅲ 在演算法框圖中flag 1或flag 0是什麼意思(要具體點的)

s函數 一下是s函數的介紹函數是system Function的簡稱,用它來寫自己的simulink模塊。(夠簡單吧,^_^, 詳細的概念介紹大夥看幫助吧)可以用matlab、C、C++、Fortran、Ada等語言來寫, 這兒我只介紹怎樣用matlab語言來寫吧(主要是它比較簡單)
先講講為什麼要用s函數,我覺得用s函數可以利用matlab的豐富資源,而不僅僅局 限於simulink提供的模塊,而用c或c++等語言寫的s函數還可以實現對硬體埠的操作, 還可以操作windows API等的
先介紹一下simulink的模擬過程(以便理解s函數),simulink的模擬有兩個階段: 一個為初始化,這個階段主要是設置一些參數,像系統的輸入輸出個數、狀態初值、 采樣時間等;第二個階段就是運行階段,這個階段里要進行計算輸出、更新離散狀態、 計算連續狀態等等,這個階段需要反復運行,直至結束。
在matlab的workspace里打edit sfuntmpl(這是matlab自己提供的s函數模板),我們 看它來具體分析s函數的結構。 它的第一行是這樣的:function [sys,x0,str,ts]=sfuntmpl(t,x,u,flag)
先講輸入與輸出變數的含義:t是采樣時間,x是狀態變數,u是輸入(是做成simulink模 塊的輸入),flag是模擬過程中的狀態標志(以它來判斷當前是初始化還是運行等);sys輸出根據flag的不同而不同(下面將結合flag來講sys的含義),x0是狀態變數的初始值,str是保留參數(mathworks公司還沒想好該怎麼用它,嘻嘻,一般在初始化中將它置空就可以了,str=[]),ts是一個1×2的向量,ts(1)是采樣周期,ts(2)是偏移量。
下面結合sfuntmpl.m中的代碼來講具體的結構:
switch flag, %判斷flag,看當前處於哪個狀態
case 0,
[sys,x0,str,ts]=mdlInitializeSizes;
flag=0表示處於初始化狀態,此時用函數mdlInitializeSizes進行初始化,此函數在 sfuntmpl.m的149行
我們找到他,在初始化狀態下,sys是一個結構體,用它來設置模塊的一些參數,各個參 數詳細說明如下
size = simsizes;%用於設置模塊參數的結構體用simsizes來生成
sizes.NumContStates = 0;%模塊連續狀態變數的個數
sizes.NumDiscStates = 0;%模塊離散狀態變數的個數
sizes.NumOutputs = 0;%模塊輸出變數的個數
sizes.NumInputs = 0;%模塊輸入變數的個數
sizes.DirFeedthrough = 1;%模塊是否存在直接貫通(直接貫通我的理解是輸入能 %直接控制輸出)
sizes.NumSampleTimes = 1;%模塊的采樣時間個數,至少是一個
sys = simsizes(sizes); %設置完後賦給sys輸出
舉個例子,考慮如下模型:
dx/dt=fc(t,x,u) 也可以用連續狀態方程描述:dx/dt=A*x+B*u
x(k+1)=fd(t,x,u) 也可以用離散狀態方程描述:x(k+1)=H*x(k)+G*u(k)
y=fo(t,x,u) 也可以用輸出狀態方程描述:y=C*x+D*u
設上述模型連續狀態變數、離散狀態變數、輸入變數、輸出變數均為1個,我們就只需改上面那一段代碼為:
(一般連續狀態與離散狀態不會一塊用,我這兒是為了方便說明)
sizes.NumContStates=1;sizes.NumDiscStates=1;sizes.NumOutputs=1;sizes.NumInpu
ts=1;
其他的可以不變。繼續在mdlInitializeSizes函數中往下看:
x0 = []; %狀態變數設置為空,表示沒有狀態變數,以我們上面的假設,可改 %為x0=[0,0](離散和連續的狀態變數我們都設它初值為0)
str = []; %這個就不用說了,保留參數嘛,置[]就可以了,反正沒什麼用,可 %能7.0會給它一些意義
ts = [0 0]; %采樣周期設為0表示是連續系統,如果是離散系統在下面的mdlGet %TimeOfNextVarHit函數中具體介紹
嘻嘻,總算講完了初始化,後面的應該快了
在sfuntmpl的106行繼續往下看:
case 1,
sys=mdlDerivatives(t,x,u);
flag=1表示此時要計算連續狀態的微分,即上面提到的dx/dt=fc(t,x,u)中的dx/dt,找到 mdlDerivatives函數(在193行)如果設置連續狀態變數個數為0,此處只需sys=[]; 就可以了(如sfuntmpl中一樣),按我們上述討論的那個模型,此處改成 sys=fc(t,x(1),u)或sys=A*x(1)+B*u %我們這兒x(1)是連續狀態變數,而x(2)是離散的 ,這兒只用到連續的,此時的輸出sys就是微分
繼續,在sfuntmpl的112行:
case 2,
sys=mdlUpdate(t,x,u);
flag=2表示此時要計算下一個離散狀態,即上面提到的x(k+1)=fd(t,x,u),找到mdlUpd ate函數(在206行)它這兒sys=[];表示沒有離散狀態,我們這而可以改成 sys=fd(t,x(2),u)或sys=H*x(2)+G*u;%sys即為x(k+1)

看來後面幾個一兩句話就可了,呵呵,在sfuntmpl的118行
case 3,
sys=mdlOutputs(t,x,u);
flag=3表示此時要計算輸出,即y=fo(t,x,u),找到mdlOutputs函數(在218行),如上,如果sys=[]表示沒有輸出,我們改成sys=fo(t,x,u)或sys=C*x+D*u %sys此時為輸出y
好像快完了,嘻嘻,在sfuntmpl的124行
case 4,
sys=mdlGetTimeOfNextVarHit(t,x,u);
flag=4表示此時要計算下一次采樣的時間,只在離散采樣系統中有用(即上文的mdlInit ializeSizes中提到的ts設置ts(1)不為0)
連續系統中只需在mdlGetTimeOfNextVarHit函數中寫上sys=[];這個函數主要用於變步長的設置,具體實現大家可以用edit vsfunc看vsfunc.m這個例子
最後一個,在sfuntmpl的130行
case 9,
sys=mdlTerminate(t,x,u);
flag=9表示此時系統要結束,一般來說寫上在mdlTerminate函數中寫上sys=[]就可,如 果你在結束時還要設置什麼,就在此函數中寫
關於sfuntmpl這個s函數的模板講完了。
s函數還可以帶用戶參數,下面給個例子,和simulink下的gain模塊功能一樣,大夥自己 看吧,我睡覺去了,累了
function [sys,x0,str,ts] = sfungain(t,x,u,flag,gain)
switch flag,
case 0,
sizes = simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates = 0;
sizes.NumOutputs = 1;
sizes.NumInputs = 1;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
x0=[];
str=[];
ts=[0,0];
case 3,
sys=gain*u;
case {1,2,4,9},
sys = [];
end

做好了s函數後,simulink--user-defined function下拖一個S-Function到你的模型,就可以用了 在simulink----user-defined function還有個s-Function Builder,他可以生成用c語 言寫的s函數 在matlab的workspace下打sfundemos,可以看到很多演示s函數的程序

Ⅳ 根據以下演算法的程序,畫出其相應的演算法程圖,並指明該演算法的目的及輸出結果.n=1S=0DoS=S+nn=n+1Loop whi

詳見解析.

Ⅳ 如圖所示的演算法框圖輸出結果為sum=1320

模擬程序框圖的運行過程,得出該程序輸出的結果是計算
sum=12×11×10×…×(i-1);
輸出結果sum=1320時,sum=12×11×10,
∴判斷框中應填i≤9.
故選:C.

Ⅵ 用語句表示演算法框圖

程序框圖如下:

Ⅶ 如何理解《演算法圖解》中的快速排序演算法

快速排序的基本思想就是從一個數組中任意挑選一個元素(通常來說會選擇最左邊的元素)作為中軸元素,將剩下的元素以中軸元素作為比較的標准,將小於等於中軸元素的放到中軸元素的左邊,將大於中軸元素的放到中軸元素的右邊。

然後以當前中軸元素的位置為界,將左半部分子數組和右半部分子數組看成兩個新的數組,重復上述操作,直到子數組的元素個數小於等於1(因為一個元素的數組必定是有序的)。

以下的代碼中會常常使用交換數組中兩個元素值的Swap方法,其代碼如下

publicstaticvoidSwap(int[] A, inti, intj){

inttmp;

tmp = A[i];

A[i] = A[j];

A[j] = tmp;


(7)演算法圖擴展閱讀:

快速排序演算法 的基本思想是:將所要進行排序的數分為左右兩個部分,其中一部分的所有數據都比另外一 部分的數據小,然後將所分得的兩部分數據進行同樣的劃分,重復執行以上的劃分操作,直 到所有要進行排序的數據變為有序為止。

定義兩個變數low和high,將low、high分別設置為要進行排序的序列的起始元素和最後一個元素的下標。第一次,low和high的取值分別為0和n-1,接下來的每次取值由劃分得到的序列起始元素和最後一個元素的下標來決定。

定義一個變數key,接下來以key的取值為基準將數組A劃分為左右兩個部分,通 常,key值為要進行排序序列的第一個元素值。第一次的取值為A[0],以後毎次取值由要劃 分序列的起始元素決定。

從high所指向的數組元素開始向左掃描,掃描的同時將下標為high的數組元素依次與劃分基準值key進行比較操作,直到high不大於low或找到第一個小於基準值key的數組元素,然後將該值賦值給low所指向的數組元素,同時將low右移一個位置。

如果low依然小於high,那麼由low所指向的數組元素開始向右掃描,掃描的同時將下標為low的數組元素值依次與劃分的基準值key進行比較操作,直到low不小於high或找到第一個大於基準值key的數組元素,然後將該值賦給high所指向的數組元素,同時將high左移一個位置。

重復步驟(3) (4),直到low的植不小於high為止,這時成功劃分後得到的左右兩部分分別為A[low……pos-1]和A[pos+1……high],其中,pos下標所對應的數組元素的值就是進行劃分的基準值key,所以在劃分結束時還要將下標為pos的數組元素賦值 為 key。

熱點內容
安卓上哪裡下大型游戲 發布:2024-12-23 15:10:58 瀏覽:189
明日之後目前適用於什麼配置 發布:2024-12-23 14:56:09 瀏覽:56
php全形半形 發布:2024-12-23 14:55:17 瀏覽:829
手機上傳助手 發布:2024-12-23 14:55:14 瀏覽:733
什麼樣的主機配置吃雞開全效 發布:2024-12-23 14:55:13 瀏覽:830
安卓我的世界114版本有什麼 發布:2024-12-23 14:42:17 瀏覽:711
vbox源碼 發布:2024-12-23 14:41:32 瀏覽:279
詩經是怎麼存儲 發布:2024-12-23 14:41:29 瀏覽:661
屏蔽視頻廣告腳本 發布:2024-12-23 14:41:24 瀏覽:420
php解析pdf 發布:2024-12-23 14:40:01 瀏覽:820