Anhang 2
--------        

PROGRAM planeten_perihel;

CONST N = 360;

CONST GRAV_ABH            = 399000.0 {km3/s2 pro Erdmasse};
      SonnenMasse         = 333000.0 {Erdmassen};
      GravAbhVonUniversum = 300000.0 {km2/s2};
         
VAR   i, passiv, aktiv: integer;
      GravAbhFaktor: real;
      alfa, GeschwInRichtung, Entfernung, anteil, summe: real;
      ResultatGeschw, GeschwSumme, Resultat: real;
      GravAbhVonSonne, GravAbhSonst, gravAbh: real;
      planet: ARRAY [1..6] OF RECORD
                                name: string[7],
                                abstand,
                                geschw,
                                masse: real
                              END {record};
BEGIN
  planet[1].name    = 'Merkur ';
  planet[1].abstand = 57.9  {Mio.km};
  planet[1].geschw  = 47.9  {km/s};
  planet[1].masse   = 0.053 {Erdmassen};

  planet[2].name    = 'Venus  ';
  planet[2].abstand = 108.2;
  planet[2].geschw  = 35;
  planet[2].masse   = 0.815;

  planet[3].name    = 'Erde   ';
  planet[3].abstand = 149.6;
  planet[3].geschw  = 29.8;
  planet[3].masse   = 1;

  planet[4].name    = 'Mars   ';
  planet[4].abstand = 227.9;
  planet[4].geschw  = 24.1;
  planet[4].masse   = 0.107;

  planet[5].name    = 'Jupiter';
  planet[5].abstand = 778;
  planet[5].geschw  = 13.1;
  planet[5].masse   = 318;

  planet[6].name    = 'Saturn ';
  planet[6].abstand = 1427;
  planet[6].geschw  = 9.6;
  planet[6].masse   = 95.2; 

         
  writeln; write('         ');
  FOR i:=1 TO 6 DO BEGIN
    write(planet[i].name);
    planet[i].abstand := planet[i].abstand * 1000000.0;  { km }
    planet[i].geschw  := planet[i].geschw  * 1000000.0;  { mm/s }
  END {for};
  writeln('Total  Perihel');
  write('          mm/s   mm/s   mm/s   mm/s   mm/s   mm/s');
  writeln('   mm/s   Sekunden'); writeln;

  FOR passiv := 1 TO 6 DO WITH planet[passiv] DO BEGIN

    GravAbhVonSonne := GRAV_ABH * SonnenMasse / abstand;

    write(name);
    GeschwSumme := 0;
    FOR aktiv:=1 TO 6 DO
      IF aktiv=passiv THEN write('       ') ELSE BEGIN
         
      GravAbhFaktor := GRAV_ABH * planet[aktiv].masse;  { km3/s2 }
      GravAbhSonst  := GravAbhVonSonne + GravAbhVonUniversum;

      summe  = 0;
      FOR i := 0 TO N-1 DO BEGIN
        alfa := 2*PI/N*i;  { Winkel in Bogenmass }
        geschwInRichtung = cos (alfa) * Planet[aktiv].geschw;
        Entfernung := sqrt ( sqr (cos(alfa)*Planet[aktiv].abstand - abstand)
                           + sqr (sin(alfa)*Planet[aktiv].abstand)          );
        gravAbh := GravAbhFaktor / Entfernung;
        anteil := geschwInRichtung * gravAbh / (GravAbhSonst + gravAbh);
        summe : = Summe + anteil;
      END {for};

      ResultatGeschw : = Summe / N;
      GeschwSumme : = GeschwSumme + ResultatGeschw;
      write(ResultatGeschw:7:3);
         
    END {for};

    write(GeschwSumme:8:2);
    resultat := GeschwSumme*3600*24*365*100;  { mm / 100 Jahre }
    resultat := resultat / 1000000.0;         { km / 100 Jahre }
    resultat := resultat / (2*PI*abstand);
    resultat := resultat * 360 * 60 * 60;     { Bogensekunden }
    writeln(resultat:7:1);

  END {for};

END {planeten_perihel}.