program Molekuly;
 const mvaz=8; {maximalni pocet vazeb atomu}
       mat=50; {maximalni pocet atomu v molekule}
       mpc=18; {maximalni protonove cislo}
 type Vektor=array[1..3] of real;
      Atom=record
            N: 1..mpc;                     {protonove cislo}
            vaz: array[1..mvaz] of 0..mat; {na co je navazan}
            R: Vektor                      {x,y,z souradnice atomu}
           end;
      Molekula=record
                 nazev: string;            {nazev molekuly}
                 na: 1..mat;               {pocet atomu v molekule}
                 atm: array[1..mat] of Atom
               end;
      Prvek=record
              m: real;                     {hmotnost prvku}
              znacka: string[2];           {Znacka prvku}
            end;
 var Psp: array[1..mpc] of Prvek;
     mol: Molekula;
     x: Vektor;
     mm:real;

{Nacteni periodicke soustavy prvku ze souboru}
 procedure CtiPsp;
  var i: integer;
      st2: string[2];
      ch1,ch2: char;
      s: text;
 begin
  assign(s,'Mndljv.txt'); reset(s);
  repeat
    readln(s,st2)
  until(st2='##');
  for i:=1 to mpc do begin
    repeat
      read(s,ch1)
    until(ch1<>' ');
    with Psp[i] do begin
      readln(s,ch2,m);
      znacka:=ch1+ch2;
      writeln(znacka,m)
    end
  end;
 end;

{Vytvori molekulu methanu}
 procedure Methan(var M: Molekula);
  var i: integer;
 begin
   with M do begin
     nazev:='Methan';
     na:=5;
   {Uhlik}
     with atm[1] do begin
       N:=6;
       vaz[1]:=2; vaz[2]:=3; vaz[3]:=4; vaz[4]:=5; vaz[5]:=0;
       R[1]:=0.0; R[2]:=0.0; R[3]:=0.0;
     end;
   {Vodiky}
     for i:=2 to 5 do
       with atm[i] do begin
         N:=1;
         vaz[1]:=1; vaz[2]:=0;
         R[1]:=0.0; R[2]:=0.0; R[3]:=0.0;
       end;
     atm[2].R[1]:=1.0; atm[2].R[3]:=1.0;
     atm[3].R[1]:=-1.0; atm[3].R[3]:=1.0;
     atm[4].R[2]:=1.0; atm[4].R[3]:=-1.0;
     atm[5].R[2]:=-1.0; atm[5].R[3]:=-1.0;
   end;
 end;

{Vytvori molekulu CO2}
 procedure CO2(var M: Molekula);
  var i: integer;
 begin
   with M do begin
     nazev:='Oxid uhlicity';
     na:=3;
   {Uhlik}
     with atm[1] do begin
       N:=6;
       vaz[1]:=2; vaz[2]:=3; vaz[3]:=0;
       R[1]:=1.0; R[2]:=1.0; R[3]:=1.0;
     end;
   {Kyslik1}
     with atm[2] do begin
       N:=8;
       vaz[1]:=1; vaz[2]:=0;
       R[1]:=2.0; R[2]:=2.0; R[3]:=2.0;
     end;
   {Kyslik2}
     with atm[3] do begin
       N:=8;
       vaz[1]:=1; vaz[2]:=0;
       R[1]:=0.0; R[2]:=0.0; R[3]:=0.0;
     end;
   end;
 end;

{Vypocet teziste molekuly}
 Procedure Teziste(M:Molekula; var t:Vektor; var hm: real);
  var s: Vektor;
      i: integer;
      mass: real;
 begin
  s[1]:=0.0; s[2]:=0; s[3]:=0;
  hm:=0.0;
  with M do for i:=1 to na do begin
              mass:=Psp[atm[i].N].m;
              s[1]:=s[1]+mass*atm[i].R[1];
              s[2]:=s[2]+mass*atm[i].R[2];
              s[3]:=s[3]+mass*atm[i].R[3];
              hm:=hm+mass;
            end;
  t[1]:=s[1]/hm;
  t[2]:=s[2]/hm;
  t[3]:=s[3]/hm;
 end;

begin
 CtiPsp;
{Methan}
 Methan(mol);
 Writeln('MOLEKULA: ',mol.nazev);
 Teziste(mol,x,mm);
 Writeln('  Teziste=',x[1]:10:3,x[2]:10:3,x[3]:10:3);
{CO2}
 CO2(mol);
 Writeln('MOLEKULA: ',mol.nazev);
 Teziste(mol,x,mm);
 Writeln('  Teziste=',x[1]:10:3,x[2]:10:3,x[3]:10:3);
{}
 writeln('======== stiskni klavesu Enter ========');
 readln;
end.