第一篇:MATLAB游戲編程實例(拼
MATLAB游戲編程實例(拼圖)
這是一個簡單的游戲,只要把數(shù)字按順序排好就可以了。游戲方法是用鼠標(biāo)點中數(shù)字,如果該數(shù)字相鄰的格子為空,則自動移到到該空格。
本程序是由realghost編寫,如果有問題可以與 slqinyi@163.com 聯(lián)系。
附圖如下:
function pintu1()A = gen()
G = [1 2 3;4 5 6;7 8 0];drawmap(A);
while 1
[xpos,ypos] = ginput(1);col = ceil(xpos);row = 3-ceil(ypos)+1;num = A(row,col);
if row>1&A(row-1,col)==0 A(row-1,col)= num;
A(row,col)= 0;
end
if row<3&A(row+1,col)==0 A(row+1,col)= num;A(row,col)= 0;
end
if col>1&A(row,col-1)==0 A(row,col-1)= num;A(row,col)= 0;
end
if col<3&A(row,col+1)==0 A(row,col+1)= num;A(row,col)= 0;
end
drawmap(A)
zt = abs(A-G);
if sum(zt(:))==0
msgbox('??ò??-3é1|?′o?í?£?')break
end end
function drawmap(A)clf;hold on
line([0 3],[0 0],'linewidth',4);line([3 3],[0 3],'linewidth',4);line([0 3],[3 3],'linewidth',4);line([0 0],[0 3],'linewidth',4);
for i = 1:3
for j = 1:3
drawrect([j-1 3-i],[j 3-i],[j 3-i+1],[j-1 3-i+1],'y',A(i,j));
end end
axis equal axis off
function drawrect(x1,x2,x3,x4,color,num)x = [x1(1)x2(1)x3(1)x4(1)];y = [x1(2)x2(2)x3(2)x4(2)];fill(x,y,color)if num==0
text(0.5*(x1(1)+x2(1)),0.5*(x1(2)+x4(2)),' ','fontsize',24)else
text(0.5*(x1(1)+x2(1))-0.05,0.5*(x1(2)+x4(2)),num2str(num),'fontsize',24)end
function y = gen()y = inf*ones(1,9);for i = 1:9
while 1
a = randint(1,1,9);
if isempty(find(y==a))y(i)= a;break
end
end end
y = reshape(y,3,3);
當(dāng)然可以啦,其實圖像就是數(shù)字矩陣,圖像的拼接就是矩陣的拼接,橫著拼得行數(shù)相等,豎著拼得列數(shù)相等就行
例子
clc;clear;
a=imread('我的圖片.jpg');[m n t]=size(a);
b=a(1:fix(m/2),:,:);%取圖像的上半部分
c=a(fix(m/2)+1:end,:,:);%取圖像的下半部分
figure(1);imshow(b);
figure(2);imshow(c);
%注意,上下拼接要求兩幅圖的列數(shù)要相同 %左右拼行數(shù)要相同
figure(3);d=[b;c];%把b,c拼起來,若左右拼接d=[b,c];imshow(d);
第二篇:數(shù)控機床編程實例(本站推薦)
一、兩種特殊的圓弧編程指令:CT和RND
常用的圓弧編程指令是G2和G3,使用時必須編入圓弧起點坐標(biāo),終點坐標(biāo)、圓弧半徑或中心坐標(biāo),可處理各種類型的圓弧編程。西門子810D/840D系統(tǒng)中的CT和RND指令也可以生成精確的圓弧軌跡,在加工輪廓中出現(xiàn)用圓弧與其他直線或圓弧相切連接的軌跡時,靈活運用CT和RND指令進行圓弧編程比使用G2和G3指令方便得多:
1、RND指令處理輪廓拐點的圓弧過渡
RND指令的含義:輪廓拐點處用指定半徑的圓弧過渡處理,并且和相關(guān)的直線或圓弧相切連接,數(shù)控系統(tǒng)自動運算各個切點的坐標(biāo)。
參照圖1 加工內(nèi)容為底邊外的其余輪廓,所用程序如下。
N005 G54 G90 G0 Z100 T1 D1
N010 X-70 Y-50
N015 M03 S1000 F500 Z-10
N020 G41 Y-20
N025 G1 Y70 RND=5
N030 G1 X-40 RND=5
N035 G3 ×0 CR=20 RND=5
N040 G3 ×40 CR=20 RND=5
N045 G1×70 RND=5
N050 G1 Y-30
N055 M30
程序中用RND=5的格式表示輪廓拐點處用半徑R5的圓弧過渡處理,并與相關(guān)的直線或圓弧相切連接,數(shù)控系統(tǒng)自動運算各個切點的坐標(biāo),程序中不需寫入切點的坐標(biāo)。而用G2和G3指令編寫各處R5圓弧就必須計算各個切點的坐標(biāo)(共10個點),還多了五條程序。
2、CT指令完成直線和圓弧或圓弧和圓相切邊接
CT指令的含義是:經(jīng)過一段直線或圓弧的結(jié)束點P1和另一個指定點P2生成一段圓弧并且和前面的直線或圓弧在P1點處相切,數(shù)控系統(tǒng)自動運算圓弧半徑CT指令是模態(tài)的。
參照圖2 加工內(nèi)容為底邊外的其余輪廓,所用程序如下:
N005 G54 G90 G0 Z100 T1 D1
N010 X-90 Y-120
N015 M03 S1000 F500Z-10
N020 G41Y-100
N025 G1 Y20
N030 X-60
N040 Yo
N045 CT X-20(第一個R20圓弧)
N050 X20(第二個R20圓?。?/p>
N055 X60(第三個R20圓弧)
N060 G1 Y20
N065 G1×90
N070 Y-100
N075 M30
用CT在編制程序時只需輸入切點坐標(biāo)而不用寫入圓弧半徑,也不用判斷圓弧的方向,在直線和圓弧或多段圓弧相切連接的輪廓編程時使用非常方便。
3、CT和RND指令在極坐標(biāo)系中的應(yīng)用
在極坐標(biāo)系中用G2和G3指令編程時有一個限制,極點必須設(shè)定在所編程圓弧的中心。而用CT和RND指令就很好地克服了這一障礙。
(1)RND指令在極坐標(biāo)系中的應(yīng)用
參照圖3在數(shù)控銑床加工4個30度的V型槽,以90度位置的V型槽為例程序如下。
N005 G54 G0 T1 D1 Z100
N010 G111 Xo YO
N015 AP=90-15 RP=110
N020 M03 S1000 F500 Z10
N025 G42 RP=100
N030 G1 RP=0 RND=10
N035 G1 RP=100
N040 M30
(2)CT指令在極坐標(biāo)系中的應(yīng)用。
參照圖4 加工上部的3段圓弧和2段直線相切連接的部位,程序如下。
N005 G54 G90 Go Z100 T1 D1
N010 G111 XO YO
N015 AP=90-36-18 RP=150
N020 M03 S1000 F500 Z-10
N025 G42 RP=130
N030 G1 RP=142.66/2
N035 CT AP=90-18
N040 AP=90+18
N045 AP=90+18+36
N050 G1 RP=150
N055 M30
圖3和圖4 這兩種類型的工件加工部位使用算術(shù)坐標(biāo)系編程數(shù)據(jù)處理比較麻煩,在極坐標(biāo)系中用G2和G3指令編程圓弧時極點必須設(shè)定在所編圓弧的中心,需要一些計算工作,而使用RND和CT指令編程圓弧時,極點就不必設(shè)定在所編圓弧的中心,極點可以設(shè)定在任意的方便數(shù)據(jù)處理的位置。圖3和圖4 這兩種類型的工件加工部位在編程時使用極坐標(biāo)且極點設(shè)定在工件中心最為方便。
二、特殊刀具補償方法在加工扇形段導(dǎo)入板中的應(yīng)用
1、一般的刀具補償方法
參照圖5,在數(shù)控銑上用40mm立銑刀加工60H7的槽,按照槽的邊界線進行編程,使用的程序如下。
N005 G54 G90 Go Z100 T1 D1
N010 X-150 YO
N020 M03 S300 F100 Z30
N025 G42 Y30
N030 G1×150
N035 Y-30
N040 X-150
N050 M30
實際加工中要經(jīng)過粗加工、半精加工和精加工運行三次程序,對應(yīng)的半徑補償值先大后小分別是22mm,20.5mm,20mm(理念值,最終的半徑補償值要經(jīng)過實際測量確定)。
2、特殊的刀具補償方法
參照圖5,在數(shù)控銑床上40mm立銑刀加工60H7的槽,按照中心線進行編程,使用的程序如下。
N005 G54 G90 GO Z100 T1 D1
N010 X-150 YO
N020 M03 S300 F100 Z30
N025 G42 X-140
N030 G1 X150
N035 GO Z100
N040 G40 X-150
N050 Z30
N055 G41 X-140
N060 G1 X150
N065 GO Z100
N070 M30
實際加工中要經(jīng)過粗加工、半精加工和精加工運行三次程序,對應(yīng)的半徑補償先小后大分別是8mm、9.5mm,10mm(理論值,最終的半徑補償值要經(jīng)過實際測量后確定),最終的半徑補償理論值=槽的寬度/2-刀具半徑。在程序中分別用G41和G42激活兩次刀補,增加了一次空行程,這種使用刀具半徑補償?shù)姆绞皆诩庸ひ话泐愋偷墓ぜr顯得很麻煩,但是在加工特定類型的工件時使用這種方法就會使編程工作變得非常簡單。
3、在加工扇形段導(dǎo)入板中的應(yīng)用
在一些比較特殊槽體的加工中,圖紙中只標(biāo)注槽的寬度、深度和中心線的形狀尺寸,針對這一類型的工件,按照中心線進行編程,加工中應(yīng)用特殊的刀具補償方法。
參照圖6,這是我公司薄板廠連鑄設(shè)備中使用的扇形段導(dǎo)入板,它是扇形段導(dǎo)入裝置中的關(guān)鍵零件。用Tk6920數(shù)控銼銑床的加工七條128×44mm導(dǎo)入槽。該工件的七條導(dǎo)入槽是由多段圓弧和直線相切連接構(gòu)成,圖紙中只標(biāo)注了槽的寬度、深度和中心線的形狀尺寸,以上部第一個導(dǎo)入槽為例說明特殊的刀具補償使用方法,按照中心線進行編程。
程序名稱:CA01
程序內(nèi)容:N5 G54 G90 G64 GO Wo Z150 T1 D1(調(diào)用第一個刀號)
N10 G111 XO YO
N15 X=-1804-100 Y=464.424
N20 M04 S250 F200 Z-44
N25 G41 X=IC(50)(激活刀補開始加工槽體的上邊界)
N30 G1 X=-1804+920.617
N35 CT AP=90-16.03 RP=1499.5
N40 G1 AP=90-16.03 RP=1499.5+100
N45 GO G40 X=IC(100)Z150
N50 X=-1804-100 Y=464.424 T1 D2(調(diào)用第二個刀號)
N55 G42 X=IC(50)(激活刀補開始加工槽體的下邊界)
N60 G1 X=-1804+920.617
N65 CT AP=90-16.03 RP=1499.5
N70 G1 AP90-16.03 RP=1499.5+100
N75 GO G40 X=IC(100)Z150
N80 M30
槽的寬度和中心線不對稱,程序中用了兩個刀號,加工槽體的上邊界時用D1,加工槽體的下邊界是時用D2,實際加工中用50mm銑刀要經(jīng)過粗加工、半精加工和精加工運行三次程序,對應(yīng)的半徑補償值先小后大分別是D1=100mm,12mm,12.5mm,D2=13mm,15mm,15.5mm.如果使用一般的刀具補償使用方法,按照槽的邊界線進行編程,就要計算槽的邊界線中各段圓弧和直線切點的坐標(biāo)以及各段圓弧的半徑,計算量是非常大的。而按照中心線進行編程就可直接使用力紙上標(biāo)注的尺寸,避免了大量、繁瑣的數(shù)據(jù)計算工作,保證了程序中所用數(shù)據(jù)的準確性,極大的提高了編程效率。
其方法有兩個特殊:
(1)按照中心線進行編程而不是按照真實的加工邊界線進行編程。
(2)刀具補償值按照粗加工、半精加工和精加工的順序逐漸加大,理論補償值二加工的邊界到中心線的距離--刀具半徑。優(yōu)點是直接使用圖紙上標(biāo)注的尺寸進行編程,保證了程序中所用數(shù)據(jù)的準確性,不需進行大量繁瑣的數(shù)據(jù)計算工作。
第三篇:MATLAB 編程題總結(jié)
MATLAB 編程題總結(jié)
LY 1.輸出x,y兩個中值較大的一個值。
x=input('x=');y=input('y=');if x>y x else y end 2.輸入x,計算y的值。計算函數(shù)的值y???x?1,x?0
?2x?1,x?0x=input('x=');if x<0 y=x+1 else y=2*x-1 End 3.輸入一學(xué)生成績,評定其等級。方法是:90~100分為“優(yōu)秀”,80~89分為“良好”,70~79分為“中等”,60~69分為“及格”,60分以為“不合格”
x=input('x=');if x>100 | x<0 y='輸入錯誤' elseif x>=90 y='優(yōu)秀' elseif x>=80 y='良好' elseif x>=70 y='中等'
elseif x>=60 y='及格' else
y='不合格' end
4.某購物超市節(jié)日期間舉辦購物打折扣的促銷活動,優(yōu)惠辦法是:每位顧客當(dāng)天一次性購物在100元以上者,按九五折優(yōu)惠;在200元以上者,按九折優(yōu)惠;在300元以上者,按八五折優(yōu)惠;在500元以上者,按八折優(yōu)惠。則可以根據(jù)顧客購物款數(shù)計算出優(yōu)惠價。
x=input('x=');if x>=500
y=x*0.8 elseif x>=300 y=x*0.85 elseif x>=200 y=x*0.9 else
y=x*0.95 end
5.編程計算:S=1+2+3+?+100
sum=0;
for i=1:100 sum=sum+i;end sum
6.計算1~100的奇數(shù)和.sum=0;
for i=1:2:100 sum=sum+i;end Sum 或
sum=0;
for i=1:100
if mod(i,2)==1 sum=sum+i;end
end sum
7.百元買百雞問題。假定小雞每只5角,公雞每只2元,母雞每只3元?,F(xiàn)在有100元錢要求買100只雞,編程列出所有可能的購雞方案。
設(shè)母雞、公雞、小雞各為x、y、z只,根據(jù)題目要求,列出方程為:
x+y+z=100 3x+2y+0.5z=100
三個未知數(shù),兩個方程,此題有若干個解。
for x=1:33
for y=1:50
for z=1:200
if x+y+z==100 & 3*x+2*y+0.5*z==100 [x,y,z] end end end end
8.我國有13億人口,按人口年增長0.8%計算,多少年后我國人口超過26億。分析:解此問題兩種方法,可根據(jù)公式:26=13*(1+0.008)n
LiYang
第 1 頁 / 共 6 頁
MATLAB 編程題總結(jié)
LY n=1;m=13;while m<26 m=m*(1+0.008);n=n+1;end n 9.求水仙花數(shù),水仙花數(shù)是指一個 n 位數(shù)(n≥3),它的每個位上的數(shù)字的 n 次冪之和等于它本身。(例如:1^3 + 5^3 + 3^3 = 153)(求出1000以內(nèi))
for i=100:999 a(1)=fix(i/100);a(2)=fix((i-a(1)*100)/10);a(3)=i-a(1)*100-a(2)*10;if a(1)^3+a(2)^3+a(3)^3==i i end end 10.雞兔同籠問題:雞和兔子關(guān)在一個籠子里,已知共有頭36個,腳100個,求籠內(nèi)關(guān)了多少只兔子和多少只雞?
for i=1:50 for j=1:36 if i+j==36&i*2+j*4==100 [i,j] end end end 1.用matlab編程求算式xyz+yzz=532中x,y,z的值(其中xyz和yzz分別表
示一個三位數(shù))。
for x=1:9
for y=1:9 for z=1:9
i=100*x+10*y+z+100*y+10*z+z;
if i==532 [x,y,z] end end end end
2.用matlab編程完成用一元人民幣換成一分、兩分、五分的所有兌換方案(即輸出所有的組合方式)。
for i=0:20
for j=0:50
k=100-i*5-j*2;if(k>=0)[i,j,k] end end end
3.有1020個西瓜,第一天賣一半多兩個,以后每天賣剩下的一半多兩個,問幾天后可以賣完,請用matlab編程計算。
day=0;x1=1020 while(x1)
x2=x1/2-2;x1=x2;
day=day+1;
end day
4.有一堆零件(100到200之間),如果分成4個零件一組的,則多2個零件;若分成7個零件一組的,則多3個零件;若分成9個零件一組的,則多5個零件。用matlab編程求這堆零件總數(shù)。
for i=100:200
if(mod(i-2,4)==0)
if(mod(i-3,7)==0)
if(mod(i-5,9)==0)i end end end end
5.編寫程序,求1000至9999之間的回文數(shù).回文數(shù)是指正讀與反讀都一樣的數(shù),如1221.for i=1000:1000:9999 for j=0:9
n=i+j*100+j*10+i/1000 end 6.作函數(shù)
yend ?sin(x),x?[0,2?]的圖象,用藍色五角星表示點。
x=0:pi/10:2pi;y=sin(x);
plot(x,y,’b-p’);
LiYang
第 2 頁 / 共 6 頁
MATLAB 編程題總結(jié)
LY 1: 編寫M函數(shù) 32f?x?2x?x?6.3, x2?0.05x?3.14計算f(1)f(2)?f2(3)
function y= fun1(x)y=(x^36.3)/(x^2 + 0.05*x-3.14);fun1(1)*fun1(2)+fun1(3)*fun1(3)ans =-12.6023 2:編寫M函數(shù)??x?1,x?2f(x)???3x,2?x?8?4x?5,8?x?20,??cosx?sinx,x?20計算f(0.1),f(1),f(9),f(22),f(2?)
function y=fff(x)if x<2 y=x+1;elseif x>=2 & x<=8 y=3*x;elseif x>8 & x<=20 y=4*x-5;else y=cos(x)+sin(x);end 3:根據(jù)pi*pi/6=1/1^2+1/2^2+1/3^2+??+1/n^2,求pi的近似值。當(dāng)n分別取100,1000,10000時,結(jié)果是多少?
y=0;n=100;
for i=1:n y=y+1/i/i;end y y =
1.6350 pi=sqrt(6*y)pi =
3.1321 y=0;n=1000;for i=1:n y=y+1/i/i;end y y =
1.6439 pi=sqrt(6*y)pi =
3.1406 y=0;n=10000;for i=1:n y=y+1/i/i;end y y =
1.6448 pi=sqrt(6*y)pi =
3.1415(2)y=0;n=8;
y=1./2*n-1;y y=
4:編程求[100,200]之間第一個能被21整除的整數(shù)。
for n=100:200 if rem(n,21)~=0 continue end break end
n
5:編寫函數(shù)文件求半徑為r的圓的面積和周長。
function [s,p]=fcircle(r)s=pi*r*r;p=2*pi*r;
6:根據(jù)y=1+11,求: 3?15???2n-1(1)y<3時的最大n值。(2)與(1)的n值對應(yīng)的y值。
y=1;n=1;while(y<3)n=n+2;y=y+1/n;
end
y=y-1/n n=(n+1)/2 運行結(jié)果: y =
2.9944
n =
LiYang
第 3 頁 / 共 6 頁
MATLAB 編程題總結(jié)
LY 57 7: 已知??f1?1,n?1??f2?0,n?2?f3?1,n?3
??fn?fn?1?2fn?2?fn?3,n?3求f中:
1~f100最大值、最小值、各數(shù)之和。
f(1)=1;f(2)=0;f(3)=1;for i=4:100
f(i)=f(i-1)-2*f(i-2)+f(i-3);end max(f)min(f)sum(f)
1.編程計算3+33+333+3333+?..前10項之和。
m=3;n=0;s=0;for i=1:10 n=10*n+m;s=s+n;end s
2.編程求
1-1/2+1/3-1/4+.......+1/99-1/100的值。
s=0;
for i=1:100
s=s+(-1)^(i-1)*1/i;end
s3.編寫程序,求 1-3+5-7+?-99+101的值。
s=0;j=1;
for i=1:2:101
s=s+(-1)^(j-1)*i;j=j+1;end
s4.編寫程序,輸出從公元1000年至2000年所有閏年的年號。判斷公元年是否為閏年的條件是:
(1)公元年數(shù)如能被4整除,而不能被100
整除,則是閏年;
(2)公元年數(shù)能被400整除也是閏年。
for year=1000:2000
if(mod(year,4)==0&mod(year,100)~=0)|mod(year,400)==0 year end end
5.將10個整數(shù)輸入到一個數(shù)組中,然后再將
其按輸入順序的逆序進行排列并輸出。
for i=1:10
a(i)=input('x=');end
for i=10:-1:a(i)end
6.一球從100米高度自由落下,每次落地后反跳回原高度的一半,再落下。求它在第10次落地時,共經(jīng)過多少m?第10次反彈多高?
Sn=100;Hn=Sn/2;for n=0:10
Sn=Sn+2*Hn;Hn=Hn/2;end Sn Hn
7.猴子吃桃問題。猴子第一天摘下若干個桃子,當(dāng)即吃了一半,還不過癮,又多吃了一個。第二天早上又將剩下的桃子吃掉一半,又多吃了一個。以后每天早上都吃了前一天剩下的一半零一個。到第10天早上再想吃時,見只剩一個桃子了。求第一天共摘多少桃子。
day=9;x=1;while(day>0)x=(x+1)*2;day=day-1;end x
LiYang
第 4 頁 / 共 6 頁
MATLAB 編程題總結(jié)
LY 附:
matlab期中試卷及答案
一、計算題
1.已知A=[1 2 3;4 5 6;7 8 9],B=[1 5 0;1 0 3;0 3 4],試寫出下列指令運行的結(jié)果: A<=2=,A*B=,A(1, :)*A(:, 3)=。
2.設(shè)a= [1,-2,3;4,5,9;6,3,-8], b= [2,6,1;-3,2,7;4,8,-1]。
(1)求a.*b
(2)求a.^2
(3)求 2-a
(4)求a(1:2,2:3)
(5)求min(a(:))
二、計算下列程序運行的結(jié)果
1、mysum=0;i=1;
while(i<100)
mysum=mysum+i;
i=i+1;
end
mysum
2、A=[1,2,3;4,5,6;7,8,9];
C=[A;[10,11,12]];
D=C(1:3,[2 3]);
E=C(1:3,:)
寫出C、D、E的結(jié)果
3、x=[0,1,0,10,1,0,1];
for i=1:7 if x(i)==0
x(i)=1;
else
500≤price<1000
5%折扣
x(i)=0;
1000≤price<2500
8%折扣
end
2500≤price<5000
10%折扣
end 5000≤price
14%折扣
x
輸入所售商品的價格,求其實際銷售價格。
4、c=6;d=[4,0,6;0,8,0];(3)fibonccci數(shù)組的元素滿足fibonacci規(guī)則:
x=d & c ak+2=ak+ak+1,(k=1,2,…);且a1=a2=1?,F(xiàn)要求求出該數(shù)組中
y=d|c 第一個大于10000的元素。
z=~d
(4)計算1!+2!+3!+4!+5?。??。?+n!值的程
寫出x、y、z的結(jié)果
序。(n可以自由輸入)
三、(1)建立M函數(shù)完成下列運算(函數(shù)名為
五、分析下面程序運行后s1,n1,s2,n2,m的值.jygxfun)
s1=0;s2=0;n1=0;n2=0
f(x,y,z)?ze?(x?y)?x?y?z?sin(x?y?3z)x=[1,-4,-8,3,10,-9,7,-3,10, 8,-5,-2,2,0 ];
m=length(x);(2)若x=1,y=2,z=3,采取調(diào)用jygxfun方式計算
for i=1:m f值, 試編程.if x(i)<0
四、(1)編程計算下面問題, x值由鍵盤輸入
s1=s1+x(i);?2n1=n1+1;
y??x?1,x?1else ?x2,?1?x?
1s2=s2+x(i);
?
n2=n2+1;
(input語句).?x2?1,x??1 end
end
(2)某商場對顧客所購買的商品實行打折銷
s1,n1,s2,n2,m 售,標(biāo)準如下(商品價格用price來表示):
2.(1)
price<200
沒有折扣
2-12
200≤price<500
3%折扣
a.*b=-12 10
24
LiYang
第 5 頁 / 共 6 頁
MATLAB 編程題總結(jié)
LY(2)1 a.^2= 16 25 81 36 9
64(3)2-a= 1
4-1-2
–7(4)-4
-1-2 a(1:2,2:3)= 5
(5)min(a(:))=-8 二1、4950
2、C =1 10 D = E = 1
3、x =1
0
0
0
4、x = 1
0
0
0
y = 1 z = 0
0
0
三、解:(1)
function [f]=jygxfun(x,y,z)
f=z*exp(-(x+y))+sqrt(x+y+z)*sin(x+y+3*z);(2)
x=1;y=2;z=3;f= jygxfun(x,y,z)
四、(1)解: x=input('x=?');
if x>=1
y=x^2+1;else if x<-1 y=x^2-1;else y=x^2;end end
y
(2)price=input('請輸入商品價格');switch fix(price/100)
0 case {0,1}
%價格小于200 rate=0;
case {2,3,4} %價格大于等于200但小于500
rate=3/100;
case num2cell(5:9)%價格大于等于500但小于1000
rate=5/100;
case num2cell(10:24)%價格大于等于1000但小于2500
rate=8/100;
case num2cell(25:49)%價格大于等于2500但小于5000
rate=10/100;
otherwise %價格大于等于5000 rate=14/100;end
price=price*(1-rate)%輸出商品實際銷售價格(3)
(4)n=input('n=')
s=0
for i=1:n
m=1
for j=1:i
m=m*j;
end
s=s+m;end s
五、s1=-31;n1=6;s2=41;n2= 8;m= 14
LiYang
第 6 頁 / 共 6 頁
第四篇:Matlab編程習(xí)慣總結(jié)
好的編程習(xí)慣
為了增強程序的可讀性,在if 結(jié)構(gòu)體開頭縮進兩格或更多的空間。編程隱患
確保變量名的前三十一個字符是獨一無二的,否則,MATLAB 將辨認不出兩變量的不 同。編程隱患
如果變量名與MATLAB 中的函數(shù)或命令重名,那么這個函數(shù)或命令將不能被訪問 好的編程習(xí)慣
給你的變量起一個描述性的且易于記憶的變量名。例如,貨幣匯率可以exchange_rate 為變量名。這種方法將使得你的程序更加明確且易于理解。好的編程習(xí)慣
在每次用到一個變量時,我們要確保變量名的大小寫的精確匹配。在變量名中只使用
小寫字母是一個好的編程習(xí)慣。好的編程習(xí)慣
在MATLAB 賦值語句后加上一個分號來禁止變量值在命令窗口(The Command Windows)的重復(fù)。這將大大提高編譯的速度。好的編程習(xí)慣 如果你在調(diào)試程序時需要檢測一個語句的結(jié)果,可能把句后的分號去掉,這樣結(jié)果將
會出現(xiàn)在命令窗口(The Command Windows)。編程隱患
不要重定義有意義的預(yù)定義變量。否則將后患無窮,制造成出小而難以發(fā)現(xiàn)的錯誤。編程隱患
fprintf 函數(shù)只能復(fù)數(shù)的實部,所以在有復(fù)數(shù)參加或產(chǎn)生的計算中,可能產(chǎn)生錯誤的結(jié) 果。好的編程習(xí)慣
如果數(shù)據(jù)需要在MATLAB 和其他程序之間交換使用,那么以ASCII 格式存儲數(shù)據(jù)。
如果只在MATLAB 中使用那么,應(yīng)以mat 文件的形式存儲數(shù)據(jù)。好的編程習(xí)慣
以“dat”的擴展名保存ASCII 數(shù)據(jù)文件,以區(qū)別于以“mat”為擴展名的mat 文件。編程隱患
在你的MATLAB 代碼中,仔細區(qū)分數(shù)組運算和矩陣運算。數(shù)組乘法和矩陣乘法極易混 淆。好的編程習(xí)慣 當(dāng)你讀取和寫入數(shù)據(jù)時,使用適當(dāng)?shù)膯挝?/p>
自上而下的編程方法是我們正規(guī)編程設(shè)計的基礎(chǔ)。1.清晰地陳述你所要解決的問題
編寫的程序大多數(shù)情況下要滿足一些感覺上的需要,但這種需要不一定能夠被人清晰地
表達出來。例如,用戶需要一個解線性方程組的表達式。像這樣的要求就不夠清楚,程序員
就很難編出一個使他滿意的程序。他必須弄清楚要有多少問題需要解決?在這些方程式中有
沒有對稱的形式使我們的開發(fā)變得簡單?程序設(shè)計者必須和使用者討論所需的程序,他們必
須要對完成的任務(wù)有一個精確細致的描述。對問題清晰的描述可以防止誤解,并且能夠幫助
程序員合理的組織他的思想。上面的例子對問題合適的陳述應(yīng)為: 設(shè)計一個用于解決聯(lián)立線性方程組的程序,這些方程中未知數(shù)的系數(shù)為實數(shù),最多有 20 個未知數(shù)。
2.定義程序所需的輸入量和程序所產(chǎn)生的輸出量
指定輸入量和輸出量,只有這樣新的程序才能適應(yīng)全過程計劃。在這個例子中方程式的
系數(shù)可能有其預(yù)先存在的順序,我們的新程序必須能按照順序讀取它們。相似地,也需要產(chǎn) 生出這個程序所要求的結(jié)果,即輸出量,我們還要以一定的格式打印出來。
3.設(shè)計你的程序得以實現(xiàn)的算法
算法是指為某個問題找到答案一步接一步的程序。在這個階段自上而下的編程方法發(fā)揮
了作用。編程設(shè)計者開始對這個問題進行邏輯劃分,把它逐步分解為一個又一個子工作。這
個過程叫做分解(decomposition)。如果一些子工作還是比較大,設(shè)計者還可以把他它分解成
更小的塊。這個過程將會繼續(xù)到問題被分解成許多簡單且易理解的小塊為止。
在問題被分解成小塊之后,每一個小塊要被進一步的求精,這個過程叫做逐步求精
(stepwise refinement)。在這個過程中,設(shè)計者開始于對本小塊代碼總括性的描述,然后開始
一步一步地定義所需的函數(shù),越來越具體,直到他能夠轉(zhuǎn)化為MATLAB 語句。逐步求精的
過程中,我們要用到的偽代碼將會在下節(jié)為大家介紹。
在算法開發(fā)過程中,這個方法是非常有用的。如果設(shè)計者真正理解了解決問題這個些步
驟,他將會對問題進行分解和逐步求精。4.把算法轉(zhuǎn)化為代碼 如果分解和逐步求精的過程已經(jīng)順利完成,那么這一步將會異常地簡單。所有程序員都
會將偽代碼一句一句地轉(zhuǎn)化為合適地MATLAB 語句。5 檢測產(chǎn)生的MATLAB 程序
這一步是真正的攔路虎。首先,程序的每一部分將會被單獨地檢測,如果有可能的話,整個程序還要被檢測一遍。在我們檢測程序時,我們必須證明所有合法輸入數(shù)據(jù)值都能夠正
常運行。用標(biāo)準的輸入值檢測程序,看它是否產(chǎn)生了值。如果在一個程序中執(zhí)行的算法包含
了不同的分支,你必須檢測每一個分支,以保證產(chǎn)生正確的答案。大程序在交付大眾使用之
前,必須經(jīng)過一系列地檢測(圖3.2)。檢測的第一步有時被稱為單元檢測(unit testing)。在單
元檢測過程中,程序的子程序?qū)华毩⒌貦z測以證明它的正確性。當(dāng)單元檢測結(jié)束之后,這個程序?qū)⑦M行一系列的組合,把獨立的子程序聯(lián)合產(chǎn)生出最后的程序。程序第一步的聯(lián)合
通常只包括很少的子程序。通過組合這些子程序,經(jīng)常用檢查子程序或函數(shù)之間的聯(lián)系。在
一系列地組合過程中,越來越多的子程序被加了進來,直到整個程序的完成。在每一次組合 的過程中,每一個錯誤都會被發(fā)現(xiàn)并在進行下一次組合之前糾正過來。好的編程習(xí)慣
在我們檢測兩數(shù)值是否相等時一定要小心,因為round off 錯誤可能會使兩個本來應(yīng)該
相等的值不相等了。這時你可以在round off 錯誤的范圍內(nèi)它是不是近似相等。好的編程習(xí)慣
if 結(jié)構(gòu)體經(jīng)常縮進2 到3 個空格,以增強程序的可讀性。好的編程習(xí)慣
對于有許多選項的選擇結(jié)構(gòu)來說,最好在一個if 結(jié)構(gòu)中使用多個elseif 語句,盡量不用 if 的嵌套結(jié)構(gòu)。好的編程習(xí)慣
對于for 循環(huán)體總是要縮進兩個或更多空格,以增強程序的可讀性。好的編程習(xí)慣
在循環(huán)執(zhí)行開始之前,總是要預(yù)先分配一個數(shù)組,這樣能大大增加循環(huán)運行的速度。好的編程習(xí)慣
那種既可以用向量可以解決的問題,也可以用循環(huán)解決的問題,最好用向量解決,這
是因為向量執(zhí)行的速度快。好的編程習(xí)慣
把大的程序分解成函數(shù),有很多的好處,例如,程序部分的獨立檢測,代碼的可復(fù)用
性,避免意想不到的錯誤。好的編程習(xí)慣
最是把全局變量聲明在函數(shù)的開頭,這樣可以區(qū)別于本地變量。好的編程習(xí)慣
在函數(shù)中的初始注釋行之后和第一個可執(zhí)行性語句之前聲明全局變量。好的編程習(xí)慣
在兩次函數(shù)調(diào)用之間有持久內(nèi)存保存本地數(shù)據(jù)。好的編程習(xí)慣
用子函數(shù)或私有函數(shù)來隱藏特殊目的的函數(shù),這些隱藏的函數(shù)只能被其他函數(shù)調(diào)用。
隱藏這些函數(shù)防止了它們偶然的使用,也能防止與其他公共函數(shù)重名時發(fā)生的沖突。編程隱患
當(dāng)我們應(yīng)用關(guān)系運算符對復(fù)數(shù)運算時,一定要小心。關(guān)系運算符>,<,<=或>=只比較
復(fù)數(shù)的實部,而不是它們的模。如果你要用這些關(guān)系運算符對一復(fù)數(shù)進行運算,比較兩復(fù) 數(shù)的模將更加常見。好的編程習(xí)慣
用char 函數(shù)創(chuàng)建二維字符數(shù)組,我們就不用擔(dān)心每一行的長度不相同了。好的編程習(xí)慣
當(dāng)你訪問一單元陣列時,不要把()與{}混淆。它們完全不同的運算。編程隱患
不要創(chuàng)建一個與已存在的數(shù)字數(shù)組重名的元陣列。如果得名了,MATLAB 會認為你把
單元陣列的內(nèi)容賦值給一個普通的數(shù)組,這將會產(chǎn)生一個錯誤信息。在創(chuàng)建單元陣列之前,確保同名的數(shù)字數(shù)字數(shù)組已經(jīng)被刪除。編程隱患
應(yīng)用函數(shù)text 從ascii 文件中按行格式讀取數(shù)據(jù),這個ascii 文件可能是其他語言生成的,或是由其他的應(yīng)用程序生成的,例如表格。好的編程習(xí)慣
除非我們必須與非MATLAB 程序進行數(shù)據(jù)交換,存儲和加載文件時,都應(yīng)用mat 文
件格式。這種格式是高效的且移植性強,它保存了所有MATLAB 數(shù)據(jù)類型的細節(jié)。好的編程習(xí)慣
對于那些必須進行人工檢查的數(shù)據(jù),或?qū)τ谀切┍仨氃诓煌挠嬎銠C上運行的數(shù)據(jù),用格式化文件創(chuàng)建數(shù)據(jù)。對于那些不需要進行人工檢查的數(shù)據(jù)且在相同類型的計算機創(chuàng)建
并運行的數(shù)據(jù),用無格式文件創(chuàng)建數(shù)據(jù),當(dāng)I/O 速度緩慢時,用格式化文件創(chuàng)建數(shù)組。
第五篇:游戲編程感想
游戲編程感想
班 53080907 周杰
首先,通過游戲編程課程的學(xué)習(xí),我了解了怎么用我們所學(xué)過的知識進行游戲編程,不過對于第一開始應(yīng)該用什么語言,你有許多種選擇,包括Basic、Pascal、C、C++、Java等等,而且在網(wǎng)上關(guān)于游戲制作新手應(yīng)該選擇哪門語言的討論也很多。推薦選擇C和C++做為開始寫游戲的語言。一些人可能會說這兩種語言對于沒有編程經(jīng)驗的新手來說有點難度,我不同意這種說法,因為我就是剛開始的也是選擇這兩種語言。另外C/C++在今天是兩種應(yīng)用范圍最廣的語言,因此你才會更有可能得到更多的編程和學(xué)習(xí)資源以及其他人的幫助。
其次,如果要進行游戲編程,我們要對我們在大學(xué)期間學(xué)過的相關(guān)知識有個大概的了解,游戲編程設(shè)計到經(jīng)濟學(xué),統(tǒng)籌學(xué),物理學(xué),機器人學(xué),生物學(xué),心理學(xué),人工智能,計算機圖形學(xué),多媒體技術(shù),虛擬現(xiàn)實等等。而且它也是一個團隊的合作才能完成的工作,它所涉及的工作有策劃、程序、美術(shù)、音樂等。只有每個方面的工作相互配合達到完美,所設(shè)計出來的游戲才是一款經(jīng)典的游戲作品。
第三,作為游戲編程,它所設(shè)計的不單單是一款游戲,如果把它想成僅僅工人們娛樂消遣的工具,那就把游戲定義的有所狹隘。游戲只是人們?nèi)粘I钪兴芙佑|到的一部分應(yīng)用,它更可以應(yīng)用虛擬現(xiàn)實的技術(shù)把這個產(chǎn)品應(yīng)用到人們生活的方方面面,比如軍事模擬訓(xùn)練,仿真模擬等等。
最后,不要僅僅是積累知識,用它。除非你用它們,否則你不能真正的知道和理解它們。用你所學(xué)的東西制作一個小的Demo。認真的去做書里面每個章節(jié)后面留的練習(xí)。
盡量玩更多的游戲。這樣做可以給你許多靈感并能幫助你把游戲做的更好一些。這也可以給你枯燥的編程工作減輕一些痛苦。
幫助別人。在教別人或者給別人講解的過程中你將會更加的了解自己,學(xué)到很多東西。有始有終。不要陷入“我知道我能完成這個游戲,但是我有更好的方法,因此我要繼續(xù)想想我的那個方法?!比绻隳芡晖暾膶懲暌粋€你從一開始要做的游戲,你將會學(xué)到非常非常多的東西,而且你也有東西可以證明你不是一個把什么東西都停留在嘴巴上的人。在你成為一個有經(jīng)驗的游戲程序員之前,請把你要做的游戲更簡單更容易一些,不要貿(mào)然的去嘗試寫一些比較大或者很復(fù)雜的游戲。