Задания
Версия для печати и копирования в MS Word
Тип Д17 № 3535
i

Ниже при­ве­де­ны тек­сты одной и той же про­грам­мы, за­пи­сан­ные на че­ты­рех язы­ках про­грам­ми­ро­ва­ния. Что будет на­пе­ча­та­но в ре­зуль­та­те вы­пол­не­ния этой про­грам­мы?

Бей­сикПас­каль

Module Task

 

Sub Main()

    Dim L As Integer = 4

    Dim R(4) As Integer

    Dim N As Integer

    R.SetValue(6, 1)

    R.SetValue(10, 2)

    R.SetValue(7, 3)

    R.SetValue(3, 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]:=6; R[2]:=10; R[3]:=7; R[4]:=3;

    Pr1(L, R);

    N:=F1(L,R);

    write(N);

    writeln;

END.

СиАл­го­рит­ми­че­ский язык

#include <iostream>

using namespace std;

#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[0] = 6; R[1] = 10; R[2] = 7; R[3] = 3;

    Pr1(L, R);

    N = F1(L, R);

    cout << N;

    free(R);

}

алг За­да­ча

нач

цел L=4; цел­таб R[1:L]; цел N

R[1]:=6; R[2]:=10; R[3]:=7; R[4]:=3;

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]:=6; R[2]:=10; R[3]:=7; R[4]:=3;. В ходе про­це­ду­ры 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]61073
t = (R[i] div 2) * 43 * 45 * 43 * 41 * 4
R[i] = t mod 52024

Функ­ции 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 * 2 + 1 = 3,

i=2: T = 3, N = 3 * 0 + 3 = 3,

i=3: T = 5, N = 3 * 2 + 5 = 11,

i=4: T = 7, N = 11 * 4 + 7 = 51.

 

По­след­нее дей­ствие и даст нам ис­ко­мый ре­зуль­тат.

 

Ответ: 51.


Аналоги к заданию № 3535: 3540 Все