Ниже приведены тексты одной и той же программы, записанные на четырех языках программирования. Что будет напечатано в результате выполнения этой программы
| Бейсик | Паскаль |
|---|---|
Module Task
Sub Main() Dim L As Integer = 4 Dim R(4) As Integer Dim N As Integer R.SetValue(5, 1) R.SetValue(9, 2) R.SetValue(6, 3) R.SetValue(2, 4) Pr1(L, R) N = F1(L, R) Console.Write(N) Console.WriteLine() End Sub
Sub Pr1(ByVal L As Integer, ByRef R As Array) Dim i, n, t As Integer For i = 1 To L t = (R.GetValue(i) \ 2) * 4 R.SetValue(t Mod 5, i) Next End Sub
Function F1(ByVal L As Integer, ByRef R As Array) As Integer Dim N, i, T N = 1 T = 1 For i = 1 To L N = N * R.GetValue(i) + T T = T + 2 Next Return N End Function
End Module
| Program Task; Uses crt; const L = 4; type atype = array [1..L] of integer; Var R : atype; N, p : integer; Procedure Pr1(L : integer; var R : atype ); var i,n,t : integer; begin for i:=1 to L do begin t:=(R[i] div 2)*4; R[i]:=t mod 5; end; end;
Function F1 (L : integer; R: atype) : integer; Var N, i, T : integer; begin N:=1; T:=1; for i:=1 to L do begin N:=N*R[i]+T; T:=T+2; end; F1:=N; end;
BEGIN R[1]:=5; R[2]:=9; R[3]:=6; R[4]:=2; Pr1(L, R); N:=F1(L,R); write(N); writeln; END.
|
| Си | Алгоритмический язык |
#include <stdlib.h>
void Pr1(int L, int* R) { int i, n, t; for ( i=0; i < L; i++ ) { t = (R[i] / 2) *4; R[i] = t % 5; } }
int F1(int L, int* R) { int N, i, T; N = 1; T = 1; for ( i=0; i < L; i++ ) { N = N *R[i]+T; T = T+2; } return N; }
void main() { int L = 4; int* R = (int*)calloc(L, sizeof(int)); int N; R[1] = 5; R[2] = 9; R[3] = 6; R[4] = 2; Pr1(L, R); N = F1(L, R); cout << N; free(R); } | алг Задача нач цел L=4; целтаб R[1:L]; цел N R[1]:=5; R[2]:=9; R[3]:=6; R[4]:=2; Pr1(L, R) N:=F1(L, R) вывод N, нс кон
алг Pr1(цел L, аргрез целтаб R[1:L]) нач цел i, n, t нц для i от 1 до L t:=div(R[i],2)*4 R[i]:=mod(t, 5) кц кон
алг цел F1(цел L, аргрез целтаб R[1:L]) нач цел N, i, T N:=1 T:=1 нц для i от 1 до L N:=N*R[i]+T T:=T + 2 кц знач:= N кон |
В конце программы на экран выводится значение переменной N, рассмотрим как она олучается на примере программы на Паскале.
Поскольку L = 4, то изначально мы имеем одномерный массив из четырёх целочисленных элемнтов R[i]:
R[1]:=5; R[2]:=9; R[3]:=6; R[4]:=2;. В ходе процедуры Pr1 эти значения изменяются, причём независимо друг от друга:
for i:=1 to L do
begin
t:=(R[i] div 2)*4;
R[i]:=t mod 5;
Оператор div оставляет целую часть от деления, а оператор mod оставляет остаток от деления (при делении на 5 он не превышает 4).
| R[i] | 5 | 9 | 6 | 2 |
| t = (R[i] div 2) * 4 | 2 * 4 | 4 * 4 | 3 * 4 | 1 * 4 |
| R[i] = t mod 5 | 3 | 1 | 2 | 4 |
Функции F1 присваивается значени переменой N, которое внутри тела функции получается следующим образом:
for i:=1 to L do
begin
N:=N*R[i]+T;
T:=T+2;
end;
Подставим полученные ранее значения R[i]:
i=1: T = 1, N = 1 * 3 + 1 = 4,
i=2: T = 3, N = 4 * 1 + 3 = 7,
i=3: T = 5, N = 7 * 2 + 5 = 19,
i=4: T = 7, N = 19 * 4 + 7 = 83.
Последнее действие и даст нам искомый результат.
Ответ: 83.

