pengantar
Sebuah batch tipe baru telah didaftarkan.
Kepribadian tipe sedang terungkap.
Lelucon lama.
Selama 38 tahun sekarang, saya harus menyelesaikan berbagai masalah dengan menyusun program yang sesuai. Selama bertahun-tahun, rentang tugas tersebut berubah menjadi sangat besar: mulai dari memprogram pengontrol AT90S2313 hingga program untuk secara otomatis mengubah kamus teknis Rusia-Jerman ke dalam bahasa Jerman-Rusia, dan dari menghitung bagian stringer yang optimal hingga menggambar pemandangan permukaan bumi dari jendela dari orbit menggunakan metode penelusuran sinar mundur.
Terlepas dari keragaman tugas, semuanya, mungkin, dapat dikaitkan dengan satu kelas, yang secara konvensional saya sebut "teknik", karena sebagian besar mereka beroperasi dengan konsep yang bersifat ilmiah dan teknis. Dalam menyelesaikan semua masalah ini, saya tidak melihat manfaat apa pun dalam menggunakan konsep seperti tipe "abstrak", yaitu menetapkan beberapa properti sewenang-wenang ke objek program. Biasanya, properti ini secara internal direpresentasikan sebagai bilangan bulat saat diterjemahkan.
Dapat dikatakan bahwa saya tidak melihat gunanya tipe seperti itu karena dalam bahasa lama (seperti PL / 1 yang saya gunakan) tidak ada pengetikan sama sekali dalam pengertian modern. Tidak, konsep tipe memang ada. Misalnya, jika dalam PL / 1 yang sama Anda mendeskripsikan dua objek yang tidak cocok, meskipun berukuran sama, dan mencoba menetapkan satu objek ke objek lainnya, Anda akan mendapatkan pesan kesalahan yang dapat diprediksi selama kompilasi (Gbr. 1).
, PL/1? , «» « IEEE-754». .
, . . . , IEEE-754. – . PL/1 «» «».
:
Declare (S1, S2) char(*) varying;
S1=S1||S2;
S1=S1+S2;
, , , , . , . , PL/1.
, «» , , , . , , , «» - . – , , – / . « »: , … , , ? « » , :
_=([2.6*-0.2]+++[/4]+[/4]-2*) mod 7
.
«» «» , , «» «». , , – «» . : «» «» - , «» «» «». «» «» , , .
, , , . ?
. , « » [1]. «» – , , - , Matlab Mathcad. PL/1 [2] , , , .
«» , ( , .. ), , , , , .
«» , («-») [3]: , (n+1) a, a1, a2,…an, k , (n+1-k) , 1, 2,… n-k, (n+1) .
- , .
, :
- L ( - ),
- M ( - ),
- T ( - ),
- Θ ( - ),
- I ( - ),
- J ( - ),
- N ( - ),
, , «» , : [x]=Ll Mm Tt Θθ Ii Jj Nn.
, «» , – , , . – .
«»
, , , . , - , - .. «» IEEE-754.
. , X1, X2, X3 [], [] [], X1=X2+X3, X2 0.01 X3 0.001, X1 1000.
– «» , .. «» . «» .
, , – . , «» , , .
«»
, – ( - ) ( - ).
. , – . () . , PL/1 sin, sind, . «» «» «» «», π/180.
, «» , , , sin , . , :
W=φ/t; // ( )
V=R*W; // ( )
, φ «» «», , W «» « », – « », « ».
«» , , . «» , (.. ). – «», .. . φ/t ( W) «» «, », R*W «» « ». , , sin(2*φ) - «» «».
«»
, , , «» . PL/1 IEEE-754 , .
«» , , Z=SQRT(X**2+Y**2), «» ( ) . . , -128 127, «» 8+9*2=26 .
«»
«» , «» .
«» . , , , .
«» .
- «» . - «» , - . , X**(1e0/3e0) «» X 1/3, .. .
, . , .. . «» , «» «» , .
, , «» , , , , . . (, ), . «» .
«»
«» ( ), , PL/1, :
Declare V float(53) [/];
, , , , , : , , , , , , , , . «».
:
Declare Mu float(53) [(1000*m)**3/c**2];
Declare Fi float(53) [/180*];
«» , %replace «» , :
%Replace
[] by [1000*],
[] by [3600*c],
[] by [1852*],
[] by [/];
…
Declare
float(53) [/],
_ float(53) [];
%Replace «», «», «» «» «» , .
«»
«» , . , , , ?
«» , :
V=10 [/];
. - , . , , . :
Declare
//
g float(53) static init(9.81e0) [/c**2],
v0 float(53) static init(10e0) [/],
//
m float(53) [],
v float(53) [/],
F float(53) [*/**2];
…
v=v0; F=g*m;
0. «» :
v=0; F,m=0;
«»
PL/1 / : , read/write get/put.
, read/write - «» .
«» . – , «» , , , , , , .
put get «» get, .. , .
, PL/1 , .. «» , .. «» , «» , , :
Declare
X1 float(53) static init(10e0) [],
X2 float(53) defined(X1);
put skip list(X1,X2);
10000 10.
?TYPE «»
«» , , TYPE, «» . () ?TYPE, «» (.. ) .
, «» , «» , . «» , , :
put skip list(s/t,type(s/t));
, , :
Declare
s float(53) static init(10) [],
t float(53) static init(5) [];
…
put skip list(s,?type,t,?type,s/t,?type);
(. 2):
«»
, , , «» . , , .. .
, , , , .
, , «» :
Declare
// -
Vmod entry((3) float(53)[]) returns(float(53)[]);
, «» ( «?»), .
Declare
//
Vmod0 entry((3) float(53)[?]) returns(float(53)[?]);
SQRT. , , «» , ½.
, , «» .
«»
?TYPE, . , «» (. 3). , , «» .
test:proc main;
%replace
[] BY [1000*],
[] BY [3600*];
declare
s float(53) static init(10) [],
t float(53) static init(5) [],
v float(53) [/];
if s*t>v*t then stop;
…
«»
«» , , , . , «» , , «» .
, .. .
.
) , :
//
WEarth float(53) static init(0.000072921158e0) [/C],
//
Dpi float(53) static init(6.28318530717958648e0) [],
// Epsilon/Mu
Em float(53) static init(66072.1866e0) [KM**2],
//
Mu float(53) static init(398600.4e0) [KM**3/C**2],
// 358
Am float(53) static init(6736e0) [KM],
//
Re float(53) static init(6378.137e0) [KM],
) , :
:
//---- +-180 ----
do i=1 to 3;
vsg(i)=vsg0(i)/1000e0; //
vrg(i)=vrg0(i)/1000e0; //
if Lamseans(i) > 180e0 then Lamseans(i)-=360e0;
end i;
:
//---- +-180 ----
do i=1 to 3;
vsg(i)=vsg0(i); //
vrg(i)=vrg0(i); //
if Lamseans(i) > _180 then Lamseans(i)-=_360;
end i;
:
BetaBal=60e0*(per2-per1)/(te2s-te1s)/2e0; //
:
BetaBal=(per2-per1)/(te2s-te1s)/2e0; //
) , , :
:
//---- ----
Radius = J3-et1+dz1*dz1+J4*cos(ArgLat+ArgLat);
Radius *= Axe*(1e0+J7*tp);
:
//---- ----
Radius = Axe*(1e0+J7*tp)* (J3-et1+dz1*dz1+J4*cos(ArgLat+ArgLat));
. , , , , :
//---- ----
do AxeOfPer=Am, i=1 to 4; // 358
AxeOfPer=((Period/Dpi)**2*Mu)**(1e0/3e0)
/(1e0-2e0/3e0*Em/AxeOfPer/AxeOfPer*(4e0*CosIncl*CosIncl-1e0));
end;
- :
//---- ----
Fi = Fi + Alz*sin(2e0*Fi);
Alz – , 1/298.257. , Fi , .. . «», , . «» «» .
PL/1 , «» :
- , ;
- , .
«» – , , , / . .
«» , , «» .
«» . «» . , «» «» . .
, - , (, sind) , (- ). .
Mars Climate Orbiter 23 1999 - « » . , «» , , , «-», .
1. , , . . . , . . , 1989, . 182.
2. .. « » RSDN Magazine #4 2011, . 15-21.
3. A. S. Romanov, A. V. Semikolenov, S.N. Taranenko, A.P. Teori Shakhorin tentang kesamaan dan dimensi. Lapisan batas. Publikasi pendidikan elektronik dari Universitas Teknik Negeri Moskow. N.E. Bauman, 2011, hal. 8.