1b278 Паскаль. P.41. Гнездо задач. Объекты. Виртуальные методы. Позднее связывание. Сборник задач по программированию Александра Приходько
 

Сборник задач по программированию. Старая версия

 

 Приходько А. Н.

 

паскаль, сервлет, prolog, сервер, servlet, ответы, образование, visual basic, программа
 

Паскаль. P.41. Гнездо задач. Объекты. Виртуальные методы. Позднее связывание

 

 

Калькулятор

/ - деление

\ - остаток

S - сумма чисел от и до

P - произведение чисел от и до

P.41.1    Ответы    Java-аналог

Определить, что будет в переменной Man после выполнения следующей программы.


Program AA;
type
    Obj1 = object
        constructor Init;
        function C1(x : integer) : integer; virtual;
        function C2(x : integer) : integer; virtual;
        destructor Done;
    end;
    PObj1 = ^Obj1;
    Obj2 = object(Obj1)
        constructor Init;
        function C1(x : integer) : integer; virtual;
    end;
    PObj2 = ^Obj2;

    constructor Obj1.Init;    begin    end;
    function Obj1.C1(x : integer) : integer;    begin    C1:=x*x;    end;
    function Obj1.C2(x : integer) : integer;
        begin    C2:=C1(x) div 3;    end;
    destructor Obj1.Done;    begin    end;
    constructor Obj2.Init;    begin    Obj1.Init;    end;
    function Obj2.C1(x : integer) : integer;    
        var    s, i : integer;
        begin    s:=0;    for i:=1 to x do s:=s+i;    C1:=s;    end;

var
    OO : PObj2;
    Man : integer;

begin
    OO:=New(PObj2,Init);
    Man:=OO^.C2(6);
    Dispose(OO,Done);
end.

 

 

Калькулятор

/ - деление

\ - остаток

S - сумма чисел от и до

P - произведение чисел от и до

P.41.2    Ответы    Java-аналог

Определить, что будет в переменной Man после выполнения следующей программы.


Program AA;
type
    Obj1 = object
        constructor Init;
        function C1(x : integer) : integer; virtual;
        function C2(x : integer) : integer; virtual;
        destructor Done;
    end;
    PObj1 = ^Obj1;
    Obj2 = object(Obj1)
        constructor Init;
        function C1(x : integer) : integer; virtual;
    end;
    PObj2 = ^Obj2;

    constructor Obj1.Init;    begin    end;
    function Obj1.C1(x : integer) : integer;    begin    C1:=x+5;    end;
    function Obj1.C2(x : integer) : integer;
        begin    C2:=C1(x)*C1(x);    end;
    destructor Obj1.Done;    begin    end;
    constructor Obj2.Init;    begin    Obj1.Init;    end;
    function Obj2.C1(x : integer) : integer;
        begin    C1:=x*2;    end;

var
    OO : PObj2;
    Man : integer;

begin
    OO:=New(PObj2,Init);
    Man:=OO^.C2(6);
    Dispose(OO,Done);
end.

 

 

Калькулятор

/ - деление

\ - остаток

S - сумма чисел от и до

P - произведение чисел от и до

P.41.3    Ответы

Определить, что будет в переменной Man после выполнения следующей программы.


Program AA;
type
    Obj1 = object
        constructor Init;
        function C1(x : integer) : integer; virtual;
        function C2(x : integer) : integer; virtual;
        destructor Done;
    end;
    PObj1 = ^Obj1;
    Obj2 = object(Obj1)
        constructor Init;
        function C1(x : integer) : integer; virtual;
    end;
    PObj2 = ^Obj2;
    PList = ^List;
    List = record
        AA : PObj1;
        Pred, Nex : PList;
    end;

    constructor Obj1.Init;    begin    end;
    function Obj1.C1(x : integer) : integer;    begin    C1:=x+5;    end;
    function Obj1.C2(x : integer) : integer;
        begin    C2:=C1(x)*C1(x);    end;
    destructor Obj1.Done;    begin    end;
    constructor Obj2.Init;    begin    Obj1.Init;    end;
    function Obj2.C1(x : integer) : integer;    begin    C1:=x*2;    end;

var
    Q, Last, PP : PList;
    Man, i : integer;

begin
    New(PP);    PP^.Pred:=nil;    PP^.Nex:=nil;
    PP^.AA:=New(PObj1,Init);    Last:=PP;
    for i:=2 to 10 do
        if i mod 2 =1 then begin
            New(Q);    Q^.Nex:=nil;
            Q^.Pred:=Last;    Last^.Nex:=Q;
            Q^.AA:=New(PObj1,Init);
            Last:=Q;
        end
        else begin
            New(Q);    Q^.Nex:=nil;
            Q^.Pred:=Last;    Last^.Nex:=Q;
            Q^.AA:=New(PObj2,Init);
            Last:=Q;
        end;
    Man:=0;
    while PP<>nil do begin
        Man:=Man+PP^.AA^.C2(2);
        Dispose(PP^.AA,Done);
        Q:=PP;
        PP:=PP^.Nex;
        Dispose(Q);
    end;
end.

 

 

Калькулятор

/ - деление

\ - остаток

S - сумма чисел от и до

P - произведение чисел от и до

P.41.4    Ответы

Определить, что будет в переменной Man после выполнения следующей программы.


Program AA;
type
    Obj1 = object
        constructor Init;
        function C1(x : integer) : integer; virtual;
        function C2(x : integer) : integer; virtual;
        destructor Done;
    end;
    PObj1 = ^Obj1;
    Obj2 = object(Obj1)
        constructor Init;
        function C1(x : integer) : integer; virtual;
    end;
    PObj2 = ^Obj2;
    PList = ^List;
    List = record
        AA : PObj1;
        Pred, Nex : PList;
    end;

constructor Obj1.Init;
begin
end;

function Obj1.C1(x : integer) : integer;
begin
    C1:=x+3;
end;

function Obj1.C2(x : integer) : integer;
begin
    C2:=C1(x)*C1(x);
end;

destructor Obj1.Done;
begin
end;

constructor Obj2.Init;
begin
    Obj1.Init;
end;

function Obj2.C1(x : integer) : integer;
begin
    C1:=x+9;
end;

var
    Q, Last, PP : PList;
    Man, i : integer;
begin
    New(PP);    PP^.Pred:=nil;    PP^.Nex:=nil;
    PP^.AA:=New(PObj1,Init);    Last:=PP;
    for i:=2 to 10 do
        if i mod 3 =1 then begin
            New(Q);    Q^.Nex:=nil;
            Q^.Pred:=Last;    Last^.Nex:=Q;
            Q^.AA:=New(PObj1,Init);
            Last:=Q;
        end
        else begin
            New(Q);    Q^.Nex:=nil;
            Q^.Pred:=Last;    Last^.Nex:=Q;
            Q^.AA:=New(PObj2,Init);
            Last:=Q;
        end;
    Man:=0;
    while PP<>nil do begin
        Man:=Man+PP^.AA^.C2(2);
        Dispose(PP^.AA,Done);
        Q:=PP;
        PP:=PP^.Nex;
        Dispose(Q);
    end;
end.

 

 

Калькулятор

/ - деление

\ - остаток

S - сумма чисел от и до

P - произведение чисел от и до

P.41.5    Ответы    Java-аналог

Определить, что будет в переменной Man после выполнения следующей программы.


Program AA;
type
    Obj_Fox = object
        I_Fox : integer;
        constructor Init;
        procedure N(x : integer); virtual;
        function Get_Fox : integer;
    end;
    Obj_Wolf = object(Obj_Fox)
        I_Wolf : integer;
        constructor Init; procedure N(x : integer); virtual;
        function Get_Wolf : integer;
    end;
    Obj_Bear = object(Obj_Wolf)
        I_Bear : integer;
        constructor Init;
        procedure N(x : integer); virtual;
        function Get_Bear : integer;
    end;

constructor Obj_Fox.Init;
begin
end;

procedure Obj_Fox.N(x : integer);
begin
    I_Fox:=x;
end;

function Obj_Fox.Get_Fox : integer;
begin
    Get_Fox:=I_Fox;
end;

constructor Obj_Wolf.Init;
begin
    Obj_Fox.Init;
end;

procedure Obj_Wolf.N(x : integer);
begin
    I_Wolf:=x div 3;
    Obj_Fox.N(x-I_Wolf);
end;

function Obj_Wolf.Get_Wolf : integer;
begin
    Get_Wolf:=I_Wolf;
end;

constructor Obj_Bear.Init;
begin
    Obj_Wolf.Init;
end;

procedure Obj_Bear.N(x : integer);
begin
    I_Bear:=x div 2;
    Obj_Wolf.N(x-I_Bear);
end;

function Obj_Bear.Get_Bear : integer;
begin
    Get_Bear:=I_Bear;
end;

var
    Z : Obj_Bear;
    Man : integer;
begin
    with Z do begin
        Init;
        N(10);
        Man:=Get_Fox+Get_Wolf*2+Get_Bear*3;
    end;
end.

 

 

Калькулятор

/ - деление

\ - остаток

S - сумма чисел от и до

P - произведение чисел от и до

P.41.6    Ответы    Java-аналог

Определить, что будет в переменной Man после выполнения следующей программы.


Program AA;
type
    Obj_Fox = object
        I_Fox : integer;
        constructor Init;
        procedure N(x : integer); virtual;
        function Get_Fox : integer;
    end;
    Obj_Wolf = object(Obj_Fox)
        I_Wolf : integer;
        constructor Init;
        procedure N(x : integer); virtual;
        function Get_Wolf : integer;
    end;
    Obj_Bear = object(Obj_Wolf)
        I_Bear : integer;
        constructor Init;
        procedure N(x : integer); virtual;
        function Get_Bear : integer;
    end;

constructor Obj_Fox.Init;
begin
end;

procedure Obj_Fox.N(x : integer);
begin
    I_Fox:=x;
end;

function Obj_Fox.Get_Fox : integer;
begin
    Get_Fox:=I_Fox;
end;

constructor Obj_Wolf.Init;
begin
    Obj_Fox.Init;
end;

procedure Obj_Wolf.N(x : integer);
begin
    I_Wolf:=x mod 3;
    Obj_Fox.N(x-I_Wolf);
end;

function Obj_Wolf.Get_Wolf : integer;
begin
    Get_Wolf:=I_Wolf;
end;

constructor Obj_Bear.Init;
begin
    Obj_Wolf.Init;
end;

procedure Obj_Bear.N(x : integer);
begin
    I_Bear:=x mod 2;
    Obj_Wolf.N(x-I_Bear);
end;

function Obj_Bear.Get_Bear : integer;
begin
    Get_Bear:=I_Bear;
end;

var
    Z : Obj_Bear;
    Man : integer;
begin
    with Z do begin
        Init;
        N(10);
        Man:=Get_Fox+Get_Wolf*2+Get_Bear*3;
    end;
end.

 

 

Калькулятор

/ - деление

\ - остаток

S - сумма чисел от и до

P - произведение чисел от и до

P.41.7    Ответы    Java-аналог

Определить, что будет в переменной Man после выполнения следующей программы.


Program AA;
type
    Obj_Fox = object
        I_Fox : integer;
        constructor Init;
        procedure N(x : integer); virtual;
        function Get_Fox : integer;
    end;
    Obj_Wolf = object(Obj_Fox)
        I_Wolf : integer;
        constructor Init;
        procedure N(x : integer); virtual;
        function Get_Wolf : integer;
    end;
    Obj_Bear = object(Obj_Wolf)
        I_Bear : integer;
        constructor Init;
        procedure N(x : integer); virtual;
        function Get_Bear : integer;
    end;

constructor Obj_Fox.Init;
begin
end;

procedure Obj_Fox.N(x : integer);
begin
    I_Fox:=x;
end;

function Obj_Fox.Get_Fox : integer;
begin
    Get_Fox:=I_Fox;
end;

constructor Obj_Wolf.Init;
begin
    Obj_Fox.Init;
end;

procedure Obj_Wolf.N(x : integer);
begin
    I_Wolf:=x*3;
    Obj_Fox.N(x-I_Wolf);
end;

function Obj_Wolf.Get_Wolf : integer;
begin
    Get_Wolf:=I_Wolf;
end;

constructor Obj_Bear.Init;
begin
    Obj_Wolf.Init;
end;

procedure Obj_Bear.N(x : integer);
begin
    I_Bear:=x*2;
    Obj_Wolf.N(x-I_Bear);
end;

function Obj_Bear.Get_Bear : integer;
begin
    Get_Bear:=I_Bear;
end;

var
    Z : Obj_Bear;
    Man : integer;

begin
    with Z do begin
        Init;
        N(10);
        Man:=Get_Fox+Get_Wolf*2+Get_Bear*3;
    end;
end.

 

 

Калькулятор

/ - деление

\ - остаток

S - сумма чисел от и до

P - произведение чисел от и до

P.41.8    Ответы    Java-аналог

Определить, что будет в переменной Man после выполнения следующей программы.


Program AA;
type
    Obj_Fox = object
        I_Fox : integer;
        constructor Init;
        procedure N(x : integer); virtual;
        function Get_Fox : integer;
    end;
    Obj_Wolf = object(Obj_Fox)
        I_Wolf : integer;
        constructor Init;
        procedure N(x : integer); virtual;
        function Get_Wolf : integer;
    end;
    Obj_Bear = object(Obj_Wolf)
        I_Bear : integer;
        constructor Init;
        procedure N(x : integer); virtual;
        function Get_Bear : integer;
    end;

constructor Obj_Fox.Init;
begin
end;

procedure Obj_Fox.N(x : integer);
begin
    I_Fox:=x;
end;

function Obj_Fox.Get_Fox : integer;
begin
    Get_Fox:=I_Fox;
end;

constructor Obj_Wolf.Init;
begin
    Obj_Fox.Init;
end;

procedure Obj_Wolf.N(x : integer);
begin
    I_Wolf:=succ(x);
    Obj_Fox.N(x-I_Wolf);
end;

function Obj_Wolf.Get_Wolf : integer;
begin
    Get_Wolf:=I_Wolf;
end;

constructor Obj_Bear.Init;
begin
    Obj_Wolf.Init;
end;

procedure Obj_Bear.N(x : integer);
begin
    I_Bear:=Succ(x);
    Obj_Wolf.N(x-I_Bear);
end;

function Obj_Bear.Get_Bear : integer;
begin
    Get_Bear:=I_Bear;
end;

var
    Z : Obj_Bear;
    Man : integer;
begin
    with Z do begin
        Init;
        N(10);
        Man:=Get_Fox+Get_Wolf*2+Get_Bear*3;
    end;
end.

 

 

Калькулятор

/ - деление

\ - остаток

S - сумма чисел от и до

P - произведение чисел от и до

P.41.9    Ответы    Java-аналог

Определить, что будет в переменной Man после выполнения следующей программы.


Program AA;
type
    Obj_Fox = object
        I_Fox : integer;
        constructor Init;
        procedure N(x : integer); virtual;
        function Get_Fox : integer;
    end;
    Obj_Wolf = object(Obj_Fox)
        I_Wolf : integer;
        constructor Init;
        procedure N(x : integer); virtual;
        function Get_Wolf : integer;
    end;
    Obj_Bear = object(Obj_Wolf)
        I_Bear : integer;
        constructor Init;
        procedure N(x : integer); virtual;
        function Get_Bear : integer;
    end;

constructor Obj_Fox.Init;
begin
end;

procedure Obj_Fox.N(x : integer);
begin
    I_Fox:=x;
end;

function Obj_Fox.Get_Fox : integer;
begin
    Get_Fox:=I_Fox;
end;

constructor Obj_Wolf.Init;
begin
    Obj_Fox.Init;
end;

procedure Obj_Wolf.N(x : integer);
begin
    I_Wolf:=pred(x);
    Obj_Fox.N(x-I_Wolf);
end;

function Obj_Wolf.Get_Wolf : integer;
begin
    Get_Wolf:=I_Wolf;
end;

constructor Obj_Bear.Init;
begin
    Obj_Wolf.Init;
end;

procedure Obj_Bear.N(x : integer);
begin
    I_Bear:=pred(x);
    Obj_Wolf.N(x-I_Bear);
end;

function Obj_Bear.Get_Bear : integer;
begin
    Get_Bear:=I_Bear;
end;

var
    Z : Obj_Bear;
    Man : integer;

begin
    with Z do begin
        Init;
        N(10);
        Man:=Get_Fox+Get_Wolf*2+Get_Bear*3;
    end;
end.

 

 

Калькулятор

/ - деление

\ - остаток

S - сумма чисел от и до

P - произведение чисел от и до

P.41.10    Ответы    Java-аналог

Определить, что будет в переменной Man после выполнения следующей программы.


Program AA;
type
    Sun1 = object
        constructor Init;
        function A : integer; virtual;
        function B : integer; virtual;
        function C : integer; virtual;
        function D : integer; virtual;
    end;
    Sun2 = object(Sun1)
        constructor Init;
        function B : integer; virtual;
        function D : integer; virtual;
    end;

constructor Sun1.Init;    begin    end;
function Sun1.A : integer;    begin    A:=7    end;
function Sun1.B : integer;    begin    B:=A*A    end;
function Sun1.C : integer;    begin    C:=A+B    end;
function Sun1.D : integer;    begin    D:=A+B+C    end;
constructor Sun2.Init;    begin    Sun1.Init    end;
function Sun2.B : integer;    begin    B:=A div 2    end;
function Sun2.D : integer;    begin    D:=C mod 10    end;

var
    XX : Sun1;
    YY : Sun2;
    Man : integer;

begin
    XX.Init;
    YY.Init;
    Man:=XX.D+YY.D
end.

 

 

Калькулятор

/ - деление

\ - остаток

S - сумма чисел от и до

P - произведение чисел от и до

P.41.11    Ответы    Java-аналог

Определить, что будет в переменной Man после выполнения следующей программы.


Program AA;
type
    Moon1 = object
        constructor Init;
        function A : integer; virtual;
        function B : integer; virtual;
        function C : integer; virtual;
        function D : integer; virtual;
    end;
    Moon2 = object(Moon1)
        constructor Init;
        function B : integer; virtual;
        function D : integer; virtual;
    end;

constructor Moon1.Init;    begin    end;
function Moon1.A : integer;    begin    A:=3    end;
function Moon1.B : integer;    begin    B:=A*A    end;
function Moon1.C : integer;    begin    C:=A+B    end;
function Moon1.D : integer;    begin    D:=C div 2    end;
constructor Moon2.Init;    begin    Moon1.Init    end;
function Moon2.B : integer;    begin    B:=A div 2    end;
function Moon2.D : integer;    begin    D:=C mod 5    end;

var
    XX : Moon1;
    YY : Moon2;
    Man : integer;

begin
    XX.Init;
    YY.Init;
    Man:=XX.D+YY.D
end.

 

 

Калькулятор

/ - деление

\ - остаток

S - сумма чисел от и до

P - произведение чисел от и до

P.41.12    Ответы    Java-аналог

Определить, что будет в переменной Man после выполнения следующей программы.


Program AA;
type
    Sky1 = object
        constructor Init;
        function B : integer; virtual;
        function C : integer; virtual;
        function D : integer; virtual;
    end;
    Sky2 = object(Sky1)
        constructor Init;
        function B : integer; virtual;
        function D : integer; virtual;
    end;

constructor Sky1.Init;    begin    end;
function Sky1.B : integer;    begin    B:=1    end;
function Sky1.C : integer;    begin    C:=B+2    end;
function Sky1.D : integer;    begin    D:=B+C    end;
constructor Sky2.Init;    begin    Sky1.Init    end;
function Sky2.B : integer;    begin    B:=2    end;
function Sky2.D : integer;    begin    D:=C mod 3    end;

var
    XX : Sky1;
    YY : Sky2;
    Man : integer;

begin
    XX.Init;
    YY.Init;
    Man:=XX.D+YY.D
end.

 

©   Александр Приходько    1996 - 2006

69 0