Írjunk programot, mely a Naprendszert szemlélteti. A bolygók együttállásból (északról) induljanak, pályájuk legyen ellipszis, a Naptól mért távolságoknak nem kell a valósággal arányosnak lenni. A bolygók mérete némileg tükrözze a nagysági viszonyúkat, relatív keringési idejük viszont a valóságot jól tükrözze. A bolygók különböző színűek legyenek, egyezzen meg a pályájuk színével. A Föld kék, a Mars vörös legyen. A Nap és a Jupiter sárga.

 

            Egy lehetséges megvalósítás futási képe:

 

 

            A program listája:

 

Program Bolygok;

 

Uses NewDelay, Crt, CrtPlus, Graph;

 

Const A: Real= 0.3;

      Uc: Byte= 0;

 

Var Xk, Yk: Integer;

 

Type TBolygo= Object

       FRn, FRk, FKi, Fr: LongInt;

       FFi: Real;

       FC: Byte;

       Procedure Init(IRn, IRk, IKi, Ir: LongInt; IFi: Real; IC: Byte);

       Function GetKis: Integer;

       Function GetNagy: Integer;

       Procedure Hely;

       Procedure Show;

       Procedure Hide;

       Procedure Mozgas;

       Private

       Fx, Fy: Integer;

     End;

 

     TControl= Object

       Nap, Mercur, Venus, Fold, Mars, Jupiter,

       Saturnus, Uranus, Neptunus, Pluto: TBolygo;

       Procedure Init;

       Procedure Run;

       Procedure Done;

     End;

 

Procedure TBolygo.Init(IRn, IRk, IKi, Ir: LongInt; IFi: Real; IC: Byte);

Begin

  FRn:= IRn;  {Nagy sugár}

  FRk:= IRk;  {Kis sugár}

  FKi:= IKi;  {Keringési idő}

  Fr:=  Ir;   {A bolygó sugara}

  FFi:= IFi;  {Kezdő fázis}

  FC:=  IC;   {A bolygó színe}

End;

 

Function TBolygo.GetKis: Integer;

Begin

  GetKis:= Round(A*FRk);

End;

 

Function TBolygo.GetNagy: Integer;

Begin

  GetNagy:= FRn;

End;

 

Procedure TBolygo.Hely;

Begin

  Fx:= Xk+Round(FRn*Cos(FFi*Pi/180));

  Fy:= Yk-Round(A*FRk*Sin(FFi*Pi/180));

End;

 

Procedure TBolygo.Show;

Begin

  Hely; SetColor(FC); SetFillStyle(1,Fc); FillEllipse(Fx, Fy, Fr, Fr);

End;

 

Procedure TBolygo.Hide;

Begin

  Hely; SetColor(Uc); SetFillStyle(1,Uc); FillEllipse(Fx, Fy, Fr, Fr);

End;

 

Procedure TBolygo.Mozgas;

Begin

  Hide; FFi:= FFi+360/FKi; Show;

End;

 

Procedure TControl.Init;

Var Gd, Gm: Integer;

Begin

  Gd:= InstallUserDriver('svga256',Nil); Gm:= 4; InitGraph(Gd,Gm,'');

  Xk:= GetMaxX Div 2; Yk:= GetMaxY Div 2; SetFillStyle(1,Uc);

  Bar(0,0, GetMaxX, GetMaxY);

  SetColor(15); OutTextXY(Xk-50,0,'Naprendszer');

  Nap.Init     (  0,  0,    0, 7, 0,14); Nap.Show;

    SetColor(14); OutTextXY(Xk+12,Yk-3,'Nap');

  Mercur.Init  ( 61, 55,   88, 2, 90, 12);

    SetColor(12); OutTextXY(Xk-10,Yk+Mercur.GetKis+5,'Mercur');

  Venus.Init   (110,106,  224, 2, 90, 11);

    SetColor(11); OutTextXY(Xk-10,Yk+Venus.GetKis+5,'Venus');

  Fold.Init    (155,145,  365, 3, 90, 9);

    SetColor(9); OutTextXY(Xk-10,Yk+Fold.GetKis+5,'Fold');

  Mars.Init    (230,226,  684, 2, 90, 4);

    SetColor(4); OutTextXY(Xk-10,Yk+Mars.GetKis+5,'Mars');

  Jupiter.Init (290,280, 4330, 4, 90, 14);

    SetColor(14); OutTextXY(Xk-10,Yk+Jupiter.GetKis+5,'Jupiter');

  Saturnus.Init(350,340,10752, 4, 90, 9);

    SetColor(9); OutTextXY(Xk-10,Yk+Saturnus.GetKis+5,'Saturnus');

  Uranus.Init  (400,390,30660, 3, 90, 10);

    SetColor(10); OutTextXY(Xk-10,Yk+Uranus.GetKis+5,'Uranus');

  Neptunus.Init(450,440,60225, 2, 90, 11);

    SetColor(11); OutTextXY(Xk-10,Yk+Neptunus.GetKis+5,'Neptunus');

  Pluto.Init   (500,490,90520, 2, 90, 2);

    SetColor(2); OutTextXY(Xk-10,Yk+Pluto.GetKis+5,'Pluto');

End;

 

Procedure TControl.Run;

Begin

  Repeat

    SetColor(6);  With Mercur Do

    Begin Mozgas; Ellipse(Xk, Yk, 0, 360,  GetNagy, GetKis) End;

    SetColor(3);  With Venus Do

    Begin Mozgas; Ellipse(Xk, Yk, 0, 360, GetNagy, GetKis) End;

    SetColor(9);  With Fold Do

    Begin Mozgas; Ellipse(Xk, Yk, 0, 360, GetNagy, GetKis) End;

    SetColor(5);  With Mars Do

    Begin Mozgas; Ellipse(Xk, Yk, 0, 360, GetNagy, GetKis) End;

    SetColor(7);  With Jupiter Do

    Begin Mozgas; Ellipse(Xk, Yk, 0, 360, GetNagy, GetKis) End;

    SetColor(8);  With Saturnus Do

    Begin Mozgas; Ellipse(Xk, Yk, 0, 360, GetNagy, GetKis) End;

    SetColor(1);  With Uranus Do

    Begin Mozgas; Ellipse(Xk, Yk, 0, 360, GetNagy, GetKis) End;

    SetColor(7);  With Neptunus Do

    Begin Mozgas; Ellipse(Xk, Yk, 0, 360, GetNagy, GetKis) End;

    SetColor(8);  With Pluto Do

    Begin Mozgas; Ellipse(Xk, Yk, 0, 360, GetNagy, GetKis) End;

  Until KeyPressed;

End;

 

Procedure TControl.Done;

Begin

  ClearDevice; CloseGraph;

End;

 

Var Control: TControl;

 

Begin

  Control.Init;

  Control.Run;

  Control.Done;

End.