|
Программируем по-русски
|
Основная задача Глагола — дать человеку возможность воплощать свои мысли на языке, близком к его родному языку. Издатель Глагола
|
(******************************************************************************) (**) ОТДЕЛ ВещОселок+; (****************************************************************************** * НАЗНАЧЕНИЕ: Скорость при двойной точности/Double precision Whetstone (A001) ******************************************************************************) ИСПОЛЬЗУЕТ Матем ИЗ "...\Отделы\Числа\", ОС ИЗ "...\Отделы\Обмен\", Вывод ИЗ "...\Отделы\Обмен\"; ПОСТ NLoopValue = 100; IIValue = 400; ВИД ARRAY4 = РЯД 5 ИЗ ШИРВЕЩ; ПЕР E1 :ARRAY4; T,T1,T2:ШИРВЕЩ; J,K,L :ЦЕЛ; ЗАДАЧА PA(E+:ARRAY4); ПЕР J1:ЦЕЛ; УКАЗ J1:=0; ПОВТОРЯТЬ E[1]:=( E[1]+E[2]+E[3]-E[4])*T; E[2]:=( E[1]+E[2]-E[3]+E[4])*T; E[3]:=( E[1]-E[2]+E[3]+E[4])*T; E[4]:=(-E[1]+E[2]+E[3]+E[4])/T2; J1:=J1+1 ДО J1 >= 6 КОН PA; ЗАДАЧА P0; УКАЗ E1[J]:=E1[K]; E1[K]:=E1[L]; E1[L]:=E1[J] КОН P0; ЗАДАЧА P3(X,Y,Z+:ШИРВЕЩ); ПЕР X1,Y1:ШИРВЕЩ; УКАЗ X1:=X; Y1:=Y; X1:=T*(X1+Y1); Y1:=T*(X1+Y1); Z:=(X1+Y1)/T2 КОН P3; ЗАДАЧА POUT(N,J,K:ЦЕЛ; X1,X2,X3,X4:ШИРВЕЩ); УКАЗ КОН POUT; ЗАДАЧА Work; ПЕР NLoop,I,II,JJ:ЦЕЛ; N1,N2,N3,N4,N5,N6,N7,N8,N9,N10,N11:ЦЕЛ; X1,X2,X3,X4,X,Y,Z:ШИРВЕЩ; УКАЗ (* замер начинается здесь *) T :=0.499975; T1:=0.50025; T2:=2.0; NLoop:=NLoopValue; II:=IIValue; ОТ JJ:=1 ДО II ВЫП (* установим соответствующее число повторов каждой части замера. *) N1:=0; N2:=12 *NLoop; N3:=14 *NLoop; N4:=345*NLoop; N5:=0; N6:=210*NLoop; N7:=32 *NLoop; N8:=899*NLoop; N9:=616*NLoop; N10:=0; N11:=93*NLoop; (* Часть 1: Простые переменные *) X1:= 1.0; X2:=-1.0; X3:=-1.0; X4:=-1.0; ОТ I:=1 ДО N1 ВЫП X1:=( X1+X2+X3-X4)*T; X2:=( X1+X2-X3+X4)*T; X3:=( X1-X2+X3+X4)*T; X4:=(-X1+X2+X3+X4)*T; КОН; ЕСЛИ JJ = II ТО POUT(N1,N1,N1,X1,X2,X3,X4) КОН; (* Часть 2: Переменные ряда *) E1[1]:= 1.0; E1[2]:=-1.0; E1[3]:=-1.0; E1[4]:=-1.0; ОТ I:=1 ДО N2 ВЫП E1[1]:=( E1[1]+E1[2]+E1[3]-E1[4])*T; E1[2]:=( E1[1]+E1[2]-E1[3]+E1[4])*T; E1[3]:=( E1[1]-E1[2]+E1[3]+E1[4])*T; E1[4]:=(-E1[1]+E1[2]+E1[3]+E1[4])*T КОН; ЕСЛИ JJ = II ТО POUT(N2,N3,N2,E1[1],E1[2],E1[3],E1[4]) КОН; (* Часть 3: Ряд, как источник задачи *) ОТ I:=1 ДО N3 ВЫП PA(E1) КОН; ЕСЛИ JJ = II ТО POUT(N3,N2,N2,E1[1],E1[2],E1[3],E1[4]) КОН; (* Часть 4: Условные переходы *) J:=1; ОТ I:=1 ДО N4 ВЫП ЕСЛИ J # 1 ТО J:=3 ИНАЧЕ J:=2 КОН; ЕСЛИ J <= 2 ТО J:=1 ИНАЧЕ J:=0 КОН; ЕСЛИ J >= 1 ТО J:=0 ИНАЧЕ J:=1 КОН КОН; ЕСЛИ JJ = II ТО POUT(N4,J,J,X1,X2,X3,X4) КОН; (* Часть 5: Пропущена; Часть 6: Целочисленная арифметика *) J:=1; K:=2; L:=3; ОТ I:=1 ДО N6 ВЫП J:=J*(K-J)*(L-K); K:=L*K-(L-J)*K; L:=(L-K)*(K+J); E1[L-1]:=(J+K+L); E1[K-1]:=(J*K*L) КОН; ЕСЛИ JJ = II ТО POUT(N6,J,K,E1[1],E1[2],E1[3],E1[4]) КОН; (* Часть 7: Тригонометрические функции *) X:=0.5; Y:=0.5; ОТ I:=1 ДО N7 ВЫП X:=T*Матем.arctg(T2*Матем.sin(X)*Матем.cos(X)/(Матем.cos(X+Y)+Матем.cos(X-Y)-1.0)); Y:=T*Матем.arctg(T2*Матем.sin(Y)*Матем.cos(Y)/(Матем.cos(X+Y)+Матем.cos(X-Y)-1.0)) КОН; ЕСЛИ JJ = II ТО POUT(N7,J,K,X,X,Y,Y) КОН; (* Часть 8: Вызов задач *) X:=1.0; Y:=1.0; Z:=1.0; ОТ I:=1 ДО N8 ВЫП P3(X,Y,Z) КОН; ЕСЛИ JJ = II ТО POUT(N8,J,K,X,Y,Z,Z) КОН; (* Часть 9: Доступ к ряду *) J:=1; K:=2; L:=3; E1[1]:=1.0; E1[2]:=2.0; E1[3]:=3.0; ОТ I:=1 ДО N9 ВЫП P0 КОН; ЕСЛИ JJ = II ТО POUT(N9,J,K,E1[1],E1[2],E1[3],E1[4]) КОН; (* Часть 10: Целочисленная арифметика *) J:=2; K:=3; ОТ I:=1 ДО N10 ВЫП J:=J+K; K:=J+K; J:=K-J; K:=K-J-J КОН; ЕСЛИ JJ = II ТО POUT(N10,J,K,X1,X2,X3,X4) КОН; (* Часть 11: Математические функции *) X:=0.75; ОТ I:=1 ДО N11 ВЫП X:=Матем.квкор(Матем.exp(Матем.ln(X)/T1)) КОН; ЕСЛИ JJ = II ТО POUT(N11,J,K,X,X,X,X) КОН КОН КОН Work; ЗАДАЧА Голова; ПЕР начВремя:ЦЕЛ; УКАЗ Вывод.Цепь("Испытание на Whetstone"); начВремя:=ОС.Время(); Work; Вывод.ЧВещ(" - %f MIPS^",NLoopValue*IIValue*1000.0/(ОС.Время() - начВремя),0,0,0) КОН Голова; УКАЗ Голова КОН ВещОселок. ▲ Вопросы, замечания и предложения высылайте на atimopheyev@yahoo.com или Издателю Глагола:
|
|