ali.2
Active Member
در توربو پاسکال 7 توابع و پروسیجر رو میشه به صورت مستقل هم نوشت یا اینکه اونها رو فقط میشه داخل برنامه و یونیت ها تعریف کرد؟
فرض کنیم یک برنامه به اسم Gauss هست که از تابع maxabs استفاده میکنه
حالا این maxabs رو باید در داخل Gauss تعریف کرد
نمیشه اون رو در بیرون به عنوان یک تابع مستقل تعریف کرد چون ممکنه بغیر از Gauss برنامه های دیگه ای هم بخوان
از اون استفاده کنن
لطفا در روش نوشتن این دو برنامه که به زبان ماشین حساب Ti-nspire هست و میخام اونها رو برگردونم به پاسکال کمکم کنید
اول یک تابع هست به اسم (maxabs(list,start که list یک متغیر از نوع llist هست و start هم یک متغیر از نوع عدد صحیح
و بزرگتر از 0
=(maxabs(list,start
func
local
j,loc,maxim,n
;(n:=dim(list
;([maxim:=abs(list[start
;loc:=start
for j:=start+1 to n do
if abs(list[j]) > maxim Then
;([maxim:=abs(list[j
;loc:=j
EndIf
EndFor
;{Return {loc,maxim
EndFunc
مثلا اگه وارد کنیم
(4,{maxabs({4,5.3,-6.5,7.8,10,-10.6 جوابی که برگردونده میشه این هست {9,10.6}
یعنی بزرگترین عنصر در مکان 9 هست و اندازش هم 10.6 چون پارامتر دوم رو 4 وارد کردیم اندیس ها از 4 شروع میشه
****************************************************************************************
حالا تابع (gauss(a,b
=(gauss(a,b
Func
local x,k,i,j,loc,maxim,help,z,p,r,n
;(n:=dim(b
;(x:=newlist(n
;(p:=newlist(n
for k:=1 to n-1 do
for i:=1 to n do
;[p:=a[i,k
EndFor
;(r:=maxabs(p,k
;[loc:=r[1
;[maxim:=r[2
if maxim=0 Then
;"disp "Error
;stop
EndIf
if loc=k Then
Else
for j:=1 To n do
;[help:=a[k,j
;[a[k,j]:=a[loc,j
;a[loc,j]:=help
{EndFor {for i
;[help:=b[k
;[b[k]:=b[loc
;b[loc]:=help
EndIf
for i:=k+1 To n do
;[z:=a[i,k]/a[k,k
;a[i,k]:=0
for j:=k+1 to n do
;[a[i,j]:=a[i,j]-z*a[k,j
{EndFor {for j
;[b:=b-z*b[k
{EndFor {for i
{EndFor {for k
for k:=n to 2 step -1 do
for i:=k-1 to 1 step -1 do
[z:=a[i,k]/a[k,k
;a[i,k]:=0
[b:=b-z*b[k
EndFor
EndFor
for i:=1 to n do
;[x:=b/a[i,i
EndFor
Return x
EndFunc
اینجا هم a یک ماتریس مربعی ، b یک لیست n عنصری ، x,k,i,j,loc اعداد صحیح
maxim,help,z اعداد حقیقی ، p یک لیست n عنصری از اعداد حقیقی
r یک لیست دو عضوی که عضو اول آن یک عدد صحیح و عضو دوم آن یک عدد حقیقی است
n هم یک متغیر از نوع عدد صحیح است
تابع dim هم ابعاد لیست و ماتریس و اندازه رشته ها رو برمیگردونه مثلا
dim({4,5,4})=3
{dim({{2,4},{7,8}})={2,2
dim("ABC")=3
تابع (newlist(n هم یک لیست n عضوی که تمام اعضاء اون صفر هستند رو برمیگردونه
ُstop هم باعث خاتمه اجرا میشه البته توی ماشین حساب stop داخل بدنه توابع رو خطا میگیره
باید داخل برنامه یا Program استفاده بشه. من اونو همین طوری نوشتم
**************************************************************************
تابع (gauss(a,b دستگاه معادلات خطی رو به روش حذفی گاوس حل میکنه
مثلا ({gauss({{1,1},{1,-1}},{2,4 جواب {1-,3} رو برمیگردونه
حالا اگه بخواهیم این دو تابع و برنامه رو به پاسکال برگردونیم چی کار باید کنیم
maxabs باید به صورت تابع نوشته بشه و gauss هم به صورت برنامه و تابع maxabs رو فراخوانی کنه
**************************************************************************
فرض کنیم یک برنامه به اسم Gauss هست که از تابع maxabs استفاده میکنه
حالا این maxabs رو باید در داخل Gauss تعریف کرد
نمیشه اون رو در بیرون به عنوان یک تابع مستقل تعریف کرد چون ممکنه بغیر از Gauss برنامه های دیگه ای هم بخوان
از اون استفاده کنن
لطفا در روش نوشتن این دو برنامه که به زبان ماشین حساب Ti-nspire هست و میخام اونها رو برگردونم به پاسکال کمکم کنید
اول یک تابع هست به اسم (maxabs(list,start که list یک متغیر از نوع llist هست و start هم یک متغیر از نوع عدد صحیح
و بزرگتر از 0
=(maxabs(list,start
func
local
j,loc,maxim,n
;(n:=dim(list
;([maxim:=abs(list[start
;loc:=start
for j:=start+1 to n do
if abs(list[j]) > maxim Then
;([maxim:=abs(list[j
;loc:=j
EndIf
EndFor
;{Return {loc,maxim
EndFunc
مثلا اگه وارد کنیم
(4,{maxabs({4,5.3,-6.5,7.8,10,-10.6 جوابی که برگردونده میشه این هست {9,10.6}
یعنی بزرگترین عنصر در مکان 9 هست و اندازش هم 10.6 چون پارامتر دوم رو 4 وارد کردیم اندیس ها از 4 شروع میشه
****************************************************************************************
حالا تابع (gauss(a,b
=(gauss(a,b
Func
local x,k,i,j,loc,maxim,help,z,p,r,n
;(n:=dim(b
;(x:=newlist(n
;(p:=newlist(n
for k:=1 to n-1 do
for i:=1 to n do
;[p:=a[i,k
EndFor
;(r:=maxabs(p,k
;[loc:=r[1
;[maxim:=r[2
if maxim=0 Then
;"disp "Error
;stop
EndIf
if loc=k Then
Else
for j:=1 To n do
;[help:=a[k,j
;[a[k,j]:=a[loc,j
;a[loc,j]:=help
{EndFor {for i
;[help:=b[k
;[b[k]:=b[loc
;b[loc]:=help
EndIf
for i:=k+1 To n do
;[z:=a[i,k]/a[k,k
;a[i,k]:=0
for j:=k+1 to n do
;[a[i,j]:=a[i,j]-z*a[k,j
{EndFor {for j
;[b:=b-z*b[k
{EndFor {for i
{EndFor {for k
for k:=n to 2 step -1 do
for i:=k-1 to 1 step -1 do
[z:=a[i,k]/a[k,k
;a[i,k]:=0
[b:=b-z*b[k
EndFor
EndFor
for i:=1 to n do
;[x:=b/a[i,i
EndFor
Return x
EndFunc
اینجا هم a یک ماتریس مربعی ، b یک لیست n عنصری ، x,k,i,j,loc اعداد صحیح
maxim,help,z اعداد حقیقی ، p یک لیست n عنصری از اعداد حقیقی
r یک لیست دو عضوی که عضو اول آن یک عدد صحیح و عضو دوم آن یک عدد حقیقی است
n هم یک متغیر از نوع عدد صحیح است
تابع dim هم ابعاد لیست و ماتریس و اندازه رشته ها رو برمیگردونه مثلا
dim({4,5,4})=3
{dim({{2,4},{7,8}})={2,2
dim("ABC")=3
تابع (newlist(n هم یک لیست n عضوی که تمام اعضاء اون صفر هستند رو برمیگردونه
ُstop هم باعث خاتمه اجرا میشه البته توی ماشین حساب stop داخل بدنه توابع رو خطا میگیره
باید داخل برنامه یا Program استفاده بشه. من اونو همین طوری نوشتم
**************************************************************************
تابع (gauss(a,b دستگاه معادلات خطی رو به روش حذفی گاوس حل میکنه
مثلا ({gauss({{1,1},{1,-1}},{2,4 جواب {1-,3} رو برمیگردونه
حالا اگه بخواهیم این دو تابع و برنامه رو به پاسکال برگردونیم چی کار باید کنیم
maxabs باید به صورت تابع نوشته بشه و gauss هم به صورت برنامه و تابع maxabs رو فراخوانی کنه
**************************************************************************