Recent

Author Topic: Periodic Table  (Read 882 times)

Gigatron

  • Sr. Member
  • ****
  • Posts: 280
  • Amiga Rulez !!
Periodic Table
« on: May 19, 2025, 12:53:54 am »
Hi,

If you start programming you must absolutely learn Array of ...(string) (integer) or else;

This small example shows you how to navigate through a table and view the data. I hope this will teach you something.

Periodic Table :
https://en.wikipedia.org/wiki/Periodic_table

Font used  CPC464 : https://fonts2u.com/amstrad-cpc464-regular.font

Regards GTR

Code: Pascal  [Select][+][-]
  1. unit Unit1;
  2.  
  3. {$mode objfpc}{$H+}
  4.  
  5. interface
  6.  
  7. uses
  8.   Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls,
  9.   Spin;
  10.  
  11. type
  12.   { TForm1 }
  13.   TForm1 = class(TForm)
  14.     ElPanel : TPanel;
  15.     Masslbl, Namelbl, Numlbl, Symbollbl: TLabel;
  16.     SpinEdit1: TSpinEdit;
  17.     procedure FormCreate(Sender: TObject);
  18.     procedure FormDestroy(Sender: TObject);
  19.     procedure SpinEdit1Change(Sender: TObject);
  20.   private
  21.  
  22.     Elements: array of record
  23.       Symbol, Name, Mass: string;
  24.       Num : Integer;
  25.     end;
  26.  
  27.     procedure SetElData(const ASymbol, AName, AMass: string; ANumber: Integer);
  28.     procedure InitElements;
  29.     procedure DisplayElement(ElNumber: Integer);
  30.   public
  31.   end;
  32.  
  33. var
  34.   Form1: TForm1;
  35.  
  36. implementation
  37.  
  38. {$R *.lfm}
  39.  
  40. { TForm1 }
  41.  
  42. procedure TForm1.FormCreate(Sender: TObject);
  43. begin
  44.  
  45.   InitElements;
  46.   SpinEdit1.MinValue := 1;
  47.   SpinEdit1.MaxValue := Length(Elements);
  48.   SpinEdit1.Value := 1;
  49.   DisplayElement(1);
  50. end;
  51.  
  52. procedure TForm1.InitElements;
  53. const
  54.   TABLE_SIZE = 118; //118*3 -1 = array size
  55.  
  56.   TABLE_DATA: array[0..353] of string = (
  57.   'H', 'Hydrogen', '1.00794', 'He', 'Helium', '4.002602',
  58.   'Li', 'Lithium', '6.941', 'Be', 'Beryllium', '9.012182',
  59.   'B', 'Boron', '10.811', 'C', 'Carbon', '12.0107',
  60.   'N', 'Nitrogen', '14.0067', 'O', 'Oxygen', '15.9994',
  61.   'F', 'Fluorine', '18.9984032', 'Ne', 'Neon', '20.1797',
  62.   'Na', 'Sodium', '22.98976...', 'Mg', 'Magnesium', '24.305',
  63.   'Al', 'Aluminium', '26.9815386', 'Si', 'Silicon', '28.0855',
  64.   'P', 'Phosphorus', '30.973762', 'S', 'Sulfur', '32.065',
  65.   'Cl', 'Chlorine', '35.453', 'Ar', 'Argon', '39.948',
  66.   'K', 'Potassium', '39.948', 'Ca', 'Calcium', '40.078',
  67.   'Sc', 'Scandium', '44.955912', 'Ti', 'Titanium', '47.867',
  68.   'V', 'Vanadium', '50.9415', 'Cr', 'Chromium', '51.9961',
  69.   'Mn', 'Manganese', '54.938045', 'Fe', 'Iron', '55.845',
  70.   'Co', 'Cobalt', '58.933195', 'Ni', 'Nickel', '58.6934',
  71.   'Cu', 'Copper', '63.546', 'Zn', 'Zinc', '65.38',
  72.   'Ga', 'Gallium', '69.723', 'Ge', 'Germanium', '72.63',
  73.   'As', 'Arsenic', '74.9216', 'Se', 'Selenium', '78.96',
  74.   'Br', 'Bromine', '79.904', 'Kr', 'Krypton', '83.798',
  75.   'Rb', 'Rubidium', '85.4678', 'Sr', 'Strontium', '87.62',
  76.   'Y', 'Yttrium', '88.90585', 'Zr', 'Zirconium', '91.224',
  77.   'Nb', 'Niobium', '92.90628', 'Mo', 'Molybdenum', '95.96',
  78.   'Tc', 'Technetium', '(98)', 'Ru', 'Ruthenium', '101.07',
  79.   'Rh', 'Rhodium', '102.9055', 'Pd', 'Palladium', '106.42',
  80.   'Ag', 'Silver', '107.8682', 'Cd', 'Cadmium', '112.411',
  81.   'In', 'Indium', '114.818', 'Sn', 'Tin', '118.71',
  82.   'Sb', 'Antimony', '121.76', 'Te', 'Tellurium', '127.6',
  83.   'I', 'Iodine', '126.90447', 'Xe', 'Xenon', '131.293',
  84.   'Cs', 'Caesium', '132.9054', 'Ba', 'Barium', '132.9054',
  85.   'La', 'Lanthanum', '138.90547', 'Ce', 'Cerium', '140.116',
  86.   'Pr', 'Praseodymium', '140.90765', 'Nd', 'Neodymium', '144.242',
  87.   'Pm', 'Promethium', '(145)', 'Sm', 'Samarium', '150.36',
  88.   'Eu', 'Europium', '151.964', 'Gd', 'Gadolinium', '157.25',
  89.   'Tb', 'Terbium', '158.92535', 'Dy', 'Dysprosium', '162.5',
  90.   'Ho', 'Holmium', '164.93032', 'Er', 'Erbium', '167.259',
  91.   'Tm', 'Thulium', '168.93421', 'Yb', 'Ytterbium', '173.054',
  92.   'Lu', 'Lutetium', '174.9668', 'Hf', 'Hafnium', '178.49',
  93.   'Ta', 'Tantalum', '180.94788', 'W', 'Tungsten', '183.84',
  94.   'Re', 'Rhenium', '186.207', 'Os', 'Osmium', '190.23',
  95.   'Ir', 'Iridium', '192.217', 'Pt', 'Platinum', '195.084',
  96.   'Au', 'Gold', '196.966569', 'Hg', 'Mercury', '200.59',
  97.   'Tl', 'Thallium', '204.3833', 'Pb', 'Lead', '207.2',
  98.   'Bi', 'Bismuth', '208.9804', 'Po', 'Polonium', '(209)',
  99.   'At', 'Astatine', '(210)', 'Rn', 'Radon', '(222)',
  100.   'Fr', 'Francium', '(223)', 'Ra', 'Radium', '(226)',
  101.   'Ac', 'Actinium', '(227)', 'Th', 'Thorium', '232.03806',
  102.   'Pa', 'Protactinium', '231.0588', 'U', 'Uranium', '238.02891',
  103.   'Np', 'Neptunium', '(237)', 'Pu', 'Plutonium', '(244)',
  104.   'Am', 'Americium', '(243)', 'Cm', 'Curium', '(247)',
  105.   'Bk', 'Berkelium', '(247)', 'Cf', 'Californium', '(251)',
  106.   'Es', 'Einstenium', '(252)', 'Fm', 'Fermium', '(257)',
  107.   'Md', 'Mendelevium', '(258)', 'No', 'Nobelium', '(259)',
  108.   'Lr', 'Lawrencium', '(262)', 'Rf', 'Rutherfordium', '(267)',
  109.   'Db', 'Dubnium', '(268)', 'Sg', 'Seaborgium', '(271)',
  110.   'Bh', 'Bohrium', '(272)', 'Hs', 'Hassium', '(270)',
  111.   'Mt', 'Meitnerium', '(276)', 'Ds', 'Darmstadium', '(281)',
  112.   'Rg', 'Roentgenium', '(280)', 'Cn', 'Copernicium', '(285)',
  113.   'Nh', 'Nihonium', '(286)', 'Fl', 'Flerovium', '(289)',
  114.   'Mc', 'Moscovium', '(290)', 'Lv', 'Livermorium', '(293)',
  115.   'Ts', 'Tennessine', '(294)', 'Og', 'Oganesson', '(294)');
  116. var
  117.   i: Integer;
  118.   idx: Integer;
  119. begin
  120.  
  121.   SetLength(Elements, TABLE_SIZE); // reserve data size
  122.   for i := 0 to TABLE_SIZE - 1 do
  123.   begin
  124.     idx    := i * 3; //  Symbol, Name, Mass,
  125.     Elements[i].Symbol := TABLE_DATA[idx];
  126.     Elements[i].Name := TABLE_DATA[idx + 1];
  127.     Elements[i].Mass := TABLE_DATA[idx + 2];
  128.     Elements[i].Num := i + 1;
  129.   end;
  130. end;
  131.  
  132. procedure TForm1.DisplayElement(ElNumber: Integer);
  133. var
  134.   Index: Integer;
  135. begin
  136.  
  137.   if (ElNumber < 1) or (ElNumber > Length(Elements)) then
  138.     Exit;
  139.  
  140.   Index := ElNumber - 1;
  141.   SetElData(
  142.     Elements[Index].Symbol,
  143.     Elements[Index].Name,
  144.     Elements[Index].Mass,
  145.     Elements[Index].Num
  146.   );
  147. end;
  148.  
  149. procedure TForm1.SpinEdit1Change(Sender: TObject);
  150. begin
  151.   DisplayElement(SpinEdit1.Value);
  152. end;
  153.  
  154. procedure TForm1.SetElData(const ASymbol, AName, AMass: string; ANumber: Integer);
  155. begin
  156.   Symbollbl.Caption := ASymbol;
  157.   Namelbl.Caption := AName;
  158.   Masslbl.Caption := AMass;
  159.   Numlbl.Caption := IntToStr(ANumber);
  160. end;
  161.  
  162. procedure TForm1.FormDestroy(Sender: TObject);
  163. begin
  164.    SetLength(Elements, 0);
  165. end;
  166.  
  167. end.

« Last Edit: May 19, 2025, 12:56:46 am by Gigatron »
Sub Quantum Technology ! Gigatron 68000 Colmar France;

Fibonacci

  • Hero Member
  • *****
  • Posts: 754
  • Internal Error Hunter
Re: Periodic Table
« Reply #1 on: May 19, 2025, 01:11:40 am »
Code: Pascal  [Select][+][-]
  1. const
  2.   Elements: array of record
  3.     Symbol, Name, Mass: string;
  4.   end = (
  5.     (Symbol: 'H';  Name: 'Hydrogen';      Mass: '1.00794'),
  6.     (Symbol: 'He'; Name: 'Helium';        Mass: '4.002602'),
  7.     (Symbol: 'Li'; Name: 'Lithium';       Mass: '6.941'),
  8.     (Symbol: 'Be'; Name: 'Beryllium';     Mass: '9.012182'),
  9.     (Symbol: 'B';  Name: 'Boron';         Mass: '10.811'),
  10.     (Symbol: 'C';  Name: 'Carbon';        Mass: '12.0107'),
  11.     (Symbol: 'N';  Name: 'Nitrogen';      Mass: '14.0067'),
  12.     (Symbol: 'O';  Name: 'Oxygen';        Mass: '15.9994'),
  13.     (Symbol: 'F';  Name: 'Fluorine';      Mass: '18.9984032'),
  14.     (Symbol: 'Ne'; Name: 'Neon';          Mass: '20.1797'),
  15.     (Symbol: 'Na'; Name: 'Sodium';        Mass: '22.98976...'),
  16.     (Symbol: 'Mg'; Name: 'Magnesium';     Mass: '24.305'),
  17.     (Symbol: 'Al'; Name: 'Aluminium';     Mass: '26.9815386'),
  18.     (Symbol: 'Si'; Name: 'Silicon';       Mass: '28.0855'),
  19.     (Symbol: 'P';  Name: 'Phosphorus';    Mass: '30.973762'),
  20.     (Symbol: 'S';  Name: 'Sulfur';        Mass: '32.065'),
  21.     (Symbol: 'Cl'; Name: 'Chlorine';      Mass: '35.453'),
  22.     (Symbol: 'Ar'; Name: 'Argon';         Mass: '39.948'),
  23.     (Symbol: 'K';  Name: 'Potassium';     Mass: '39.948'),
  24.     (Symbol: 'Ca'; Name: 'Calcium';       Mass: '40.078'),
  25.     (Symbol: 'Sc'; Name: 'Scandium';      Mass: '44.955912'),
  26.     (Symbol: 'Ti'; Name: 'Titanium';      Mass: '47.867'),
  27.     (Symbol: 'V';  Name: 'Vanadium';      Mass: '50.9415'),
  28.     (Symbol: 'Cr'; Name: 'Chromium';      Mass: '51.9961'),
  29.     (Symbol: 'Mn'; Name: 'Manganese';     Mass: '54.938045'),
  30.     (Symbol: 'Fe'; Name: 'Iron';          Mass: '55.845'),
  31.     (Symbol: 'Co'; Name: 'Cobalt';        Mass: '58.933195'),
  32.     (Symbol: 'Ni'; Name: 'Nickel';        Mass: '58.6934'),
  33.     (Symbol: 'Cu'; Name: 'Copper';        Mass: '63.546'),
  34.     (Symbol: 'Zn'; Name: 'Zinc';          Mass: '65.38'),
  35.     (Symbol: 'Ga'; Name: 'Gallium';       Mass: '69.723'),
  36.     (Symbol: 'Ge'; Name: 'Germanium';     Mass: '72.63'),
  37.     (Symbol: 'As'; Name: 'Arsenic';       Mass: '74.9216'),
  38.     (Symbol: 'Se'; Name: 'Selenium';      Mass: '78.96'),
  39.     (Symbol: 'Br'; Name: 'Bromine';       Mass: '79.904'),
  40.     (Symbol: 'Kr'; Name: 'Krypton';       Mass: '83.798'),
  41.     (Symbol: 'Rb'; Name: 'Rubidium';      Mass: '85.4678'),
  42.     (Symbol: 'Sr'; Name: 'Strontium';     Mass: '87.62'),
  43.     (Symbol: 'Y';  Name: 'Yttrium';       Mass: '88.90585'),
  44.     (Symbol: 'Zr'; Name: 'Zirconium';     Mass: '91.224'),
  45.     (Symbol: 'Nb'; Name: 'Niobium';       Mass: '92.90628'),
  46.     (Symbol: 'Mo'; Name: 'Molybdenum';    Mass: '95.96'),
  47.     (Symbol: 'Tc'; Name: 'Technetium';    Mass: '(98)'),
  48.     (Symbol: 'Ru'; Name: 'Ruthenium';     Mass: '101.07'),
  49.     (Symbol: 'Rh'; Name: 'Rhodium';       Mass: '102.9055'),
  50.     (Symbol: 'Pd'; Name: 'Palladium';     Mass: '106.42'),
  51.     (Symbol: 'Ag'; Name: 'Silver';        Mass: '107.8682'),
  52.     (Symbol: 'Cd'; Name: 'Cadmium';       Mass: '112.411'),
  53.     (Symbol: 'In'; Name: 'Indium';        Mass: '114.818'),
  54.     (Symbol: 'Sn'; Name: 'Tin';           Mass: '118.71'),
  55.     (Symbol: 'Sb'; Name: 'Antimony';      Mass: '121.76'),
  56.     (Symbol: 'Te'; Name: 'Tellurium';     Mass: '127.6'),
  57.     (Symbol: 'I';  Name: 'Iodine';        Mass: '126.90447'),
  58.     (Symbol: 'Xe'; Name: 'Xenon';         Mass: '131.293'),
  59.     (Symbol: 'Cs'; Name: 'Caesium';       Mass: '132.9054'),
  60.     (Symbol: 'Ba'; Name: 'Barium';        Mass: '132.9054'),
  61.     (Symbol: 'La'; Name: 'Lanthanum';     Mass: '138.90547'),
  62.     (Symbol: 'Ce'; Name: 'Cerium';        Mass: '140.116'),
  63.     (Symbol: 'Pr'; Name: 'Praseodymium';  Mass: '140.90765'),
  64.     (Symbol: 'Nd'; Name: 'Neodymium';     Mass: '144.242'),
  65.     (Symbol: 'Pm'; Name: 'Promethium';    Mass: '(145)'),
  66.     (Symbol: 'Sm'; Name: 'Samarium';      Mass: '150.36'),
  67.     (Symbol: 'Eu'; Name: 'Europium';      Mass: '151.964'),
  68.     (Symbol: 'Gd'; Name: 'Gadolinium';    Mass: '157.25'),
  69.     (Symbol: 'Tb'; Name: 'Terbium';       Mass: '158.92535'),
  70.     (Symbol: 'Dy'; Name: 'Dysprosium';    Mass: '162.5'),
  71.     (Symbol: 'Ho'; Name: 'Holmium';       Mass: '164.93032'),
  72.     (Symbol: 'Er'; Name: 'Erbium';        Mass: '167.259'),
  73.     (Symbol: 'Tm'; Name: 'Thulium';       Mass: '168.93421'),
  74.     (Symbol: 'Yb'; Name: 'Ytterbium';     Mass: '173.054'),
  75.     (Symbol: 'Lu'; Name: 'Lutetium';      Mass: '174.9668'),
  76.     (Symbol: 'Hf'; Name: 'Hafnium';       Mass: '178.49'),
  77.     (Symbol: 'Ta'; Name: 'Tantalum';      Mass: '180.94788'),
  78.     (Symbol: 'W';  Name: 'Tungsten';      Mass: '183.84'),
  79.     (Symbol: 'Re'; Name: 'Rhenium';       Mass: '186.207'),
  80.     (Symbol: 'Os'; Name: 'Osmium';        Mass: '190.23'),
  81.     (Symbol: 'Ir'; Name: 'Iridium';       Mass: '192.217'),
  82.     (Symbol: 'Pt'; Name: 'Platinum';      Mass: '195.084'),
  83.     (Symbol: 'Au'; Name: 'Gold';          Mass: '196.966569'),
  84.     (Symbol: 'Hg'; Name: 'Mercury';       Mass: '200.59'),
  85.     (Symbol: 'Tl'; Name: 'Thallium';      Mass: '204.3833'),
  86.     (Symbol: 'Pb'; Name: 'Lead';          Mass: '207.2'),
  87.     (Symbol: 'Bi'; Name: 'Bismuth';       Mass: '208.9804'),
  88.     (Symbol: 'Po'; Name: 'Polonium';      Mass: '(209)'),
  89.     (Symbol: 'At'; Name: 'Astatine';      Mass: '(210)'),
  90.     (Symbol: 'Rn'; Name: 'Radon';         Mass: '(222)'),
  91.     (Symbol: 'Fr'; Name: 'Francium';      Mass: '(223)'),
  92.     (Symbol: 'Ra'; Name: 'Radium';        Mass: '(226)'),
  93.     (Symbol: 'Ac'; Name: 'Actinium';      Mass: '(227)'),
  94.     (Symbol: 'Th'; Name: 'Thorium';       Mass: '232.03806'),
  95.     (Symbol: 'Pa'; Name: 'Protactinium';  Mass: '231.0588'),
  96.     (Symbol: 'U';  Name: 'Uranium';       Mass: '238.02891'),
  97.     (Symbol: 'Np'; Name: 'Neptunium';     Mass: '(237)'),
  98.     (Symbol: 'Pu'; Name: 'Plutonium';     Mass: '(244)'),
  99.     (Symbol: 'Am'; Name: 'Americium';     Mass: '(243)'),
  100.     (Symbol: 'Cm'; Name: 'Curium';        Mass: '(247)'),
  101.     (Symbol: 'Bk'; Name: 'Berkelium';     Mass: '(247)'),
  102.     (Symbol: 'Cf'; Name: 'Californium';   Mass: '(251)'),
  103.     (Symbol: 'Es'; Name: 'Einstenium';    Mass: '(252)'),
  104.     (Symbol: 'Fm'; Name: 'Fermium';       Mass: '(257)'),
  105.     (Symbol: 'Md'; Name: 'Mendelevium';   Mass: '(258)'),
  106.     (Symbol: 'No'; Name: 'Nobelium';      Mass: '(259)'),
  107.     (Symbol: 'Lr'; Name: 'Lawrencium';    Mass: '(262)'),
  108.     (Symbol: 'Rf'; Name: 'Rutherfordium'; Mass: '(267)'),
  109.     (Symbol: 'Db'; Name: 'Dubnium';       Mass: '(268)'),
  110.     (Symbol: 'Sg'; Name: 'Seaborgium';    Mass: '(271)'),
  111.     (Symbol: 'Bh'; Name: 'Bohrium';       Mass: '(272)'),
  112.     (Symbol: 'Hs'; Name: 'Hassium';       Mass: '(270)'),
  113.     (Symbol: 'Mt'; Name: 'Meitnerium';    Mass: '(276)'),
  114.     (Symbol: 'Ds'; Name: 'Darmstadium';   Mass: '(281)'),
  115.     (Symbol: 'Rg'; Name: 'Roentgenium';   Mass: '(280)'),
  116.     (Symbol: 'Cn'; Name: 'Copernicium';   Mass: '(285)'),
  117.     (Symbol: 'Nh'; Name: 'Nihonium';      Mass: '(286)'),
  118.     (Symbol: 'Fl'; Name: 'Flerovium';     Mass: '(289)'),
  119.     (Symbol: 'Mc'; Name: 'Moscovium';     Mass: '(290)'),
  120.     (Symbol: 'Lv'; Name: 'Livermorium';   Mass: '(293)'),
  121.     (Symbol: 'Ts'; Name: 'Tennessine';    Mass: '(294)'),
  122.     (Symbol: 'Og'; Name: 'Oganesson';     Mass: '(294)')
  123.   );

440bx

  • Hero Member
  • *****
  • Posts: 5454
Re: Periodic Table
« Reply #2 on: May 19, 2025, 01:56:31 am »
Here is another way of defining the elements (in a short program to show how to use it)

Code: Pascal  [Select][+][-]
  1. program _Elements;
  2.  
  3. const
  4.   TABLE_SIZE = 118; //118*3 -1 = array size
  5.  
  6.   TABLE_DATA: array[0..pred(TABLE_SIZE * 3)] of string = (
  7.   'H', 'Hydrogen', '1.00794', 'He', 'Helium', '4.002602',
  8.   'Li', 'Lithium', '6.941', 'Be', 'Beryllium', '9.012182',
  9.   'B', 'Boron', '10.811', 'C', 'Carbon', '12.0107',
  10.   'N', 'Nitrogen', '14.0067', 'O', 'Oxygen', '15.9994',
  11.   'F', 'Fluorine', '18.9984032', 'Ne', 'Neon', '20.1797',
  12.   'Na', 'Sodium', '22.98976...', 'Mg', 'Magnesium', '24.305',
  13.   'Al', 'Aluminium', '26.9815386', 'Si', 'Silicon', '28.0855',
  14.   'P', 'Phosphorus', '30.973762', 'S', 'Sulfur', '32.065',
  15.   'Cl', 'Chlorine', '35.453', 'Ar', 'Argon', '39.948',
  16.   'K', 'Potassium', '39.948', 'Ca', 'Calcium', '40.078',
  17.   'Sc', 'Scandium', '44.955912', 'Ti', 'Titanium', '47.867',
  18.   'V', 'Vanadium', '50.9415', 'Cr', 'Chromium', '51.9961',
  19.   'Mn', 'Manganese', '54.938045', 'Fe', 'Iron', '55.845',
  20.   'Co', 'Cobalt', '58.933195', 'Ni', 'Nickel', '58.6934',
  21.   'Cu', 'Copper', '63.546', 'Zn', 'Zinc', '65.38',
  22.   'Ga', 'Gallium', '69.723', 'Ge', 'Germanium', '72.63',
  23.   'As', 'Arsenic', '74.9216', 'Se', 'Selenium', '78.96',
  24.   'Br', 'Bromine', '79.904', 'Kr', 'Krypton', '83.798',
  25.   'Rb', 'Rubidium', '85.4678', 'Sr', 'Strontium', '87.62',
  26.   'Y', 'Yttrium', '88.90585', 'Zr', 'Zirconium', '91.224',
  27.   'Nb', 'Niobium', '92.90628', 'Mo', 'Molybdenum', '95.96',
  28.   'Tc', 'Technetium', '(98)', 'Ru', 'Ruthenium', '101.07',
  29.   'Rh', 'Rhodium', '102.9055', 'Pd', 'Palladium', '106.42',
  30.   'Ag', 'Silver', '107.8682', 'Cd', 'Cadmium', '112.411',
  31.   'In', 'Indium', '114.818', 'Sn', 'Tin', '118.71',
  32.   'Sb', 'Antimony', '121.76', 'Te', 'Tellurium', '127.6',
  33.   'I', 'Iodine', '126.90447', 'Xe', 'Xenon', '131.293',
  34.   'Cs', 'Caesium', '132.9054', 'Ba', 'Barium', '132.9054',
  35.   'La', 'Lanthanum', '138.90547', 'Ce', 'Cerium', '140.116',
  36.   'Pr', 'Praseodymium', '140.90765', 'Nd', 'Neodymium', '144.242',
  37.   'Pm', 'Promethium', '(145)', 'Sm', 'Samarium', '150.36',
  38.   'Eu', 'Europium', '151.964', 'Gd', 'Gadolinium', '157.25',
  39.   'Tb', 'Terbium', '158.92535', 'Dy', 'Dysprosium', '162.5',
  40.   'Ho', 'Holmium', '164.93032', 'Er', 'Erbium', '167.259',
  41.   'Tm', 'Thulium', '168.93421', 'Yb', 'Ytterbium', '173.054',
  42.   'Lu', 'Lutetium', '174.9668', 'Hf', 'Hafnium', '178.49',
  43.   'Ta', 'Tantalum', '180.94788', 'W', 'Tungsten', '183.84',
  44.   'Re', 'Rhenium', '186.207', 'Os', 'Osmium', '190.23',
  45.   'Ir', 'Iridium', '192.217', 'Pt', 'Platinum', '195.084',
  46.   'Au', 'Gold', '196.966569', 'Hg', 'Mercury', '200.59',
  47.   'Tl', 'Thallium', '204.3833', 'Pb', 'Lead', '207.2',
  48.   'Bi', 'Bismuth', '208.9804', 'Po', 'Polonium', '(209)',
  49.   'At', 'Astatine', '(210)', 'Rn', 'Radon', '(222)',
  50.   'Fr', 'Francium', '(223)', 'Ra', 'Radium', '(226)',
  51.   'Ac', 'Actinium', '(227)', 'Th', 'Thorium', '232.03806',
  52.   'Pa', 'Protactinium', '231.0588', 'U', 'Uranium', '238.02891',
  53.   'Np', 'Neptunium', '(237)', 'Pu', 'Plutonium', '(244)',
  54.   'Am', 'Americium', '(243)', 'Cm', 'Curium', '(247)',
  55.   'Bk', 'Berkelium', '(247)', 'Cf', 'Californium', '(251)',
  56.   'Es', 'Einstenium', '(252)', 'Fm', 'Fermium', '(257)',
  57.   'Md', 'Mendelevium', '(258)', 'No', 'Nobelium', '(259)',
  58.   'Lr', 'Lawrencium', '(262)', 'Rf', 'Rutherfordium', '(267)',
  59.   'Db', 'Dubnium', '(268)', 'Sg', 'Seaborgium', '(271)',
  60.   'Bh', 'Bohrium', '(272)', 'Hs', 'Hassium', '(270)',
  61.   'Mt', 'Meitnerium', '(276)', 'Ds', 'Darmstadium', '(281)',
  62.   'Rg', 'Roentgenium', '(280)', 'Cn', 'Copernicium', '(285)',
  63.   'Nh', 'Nihonium', '(286)', 'Fl', 'Flerovium', '(289)',
  64.   'Mc', 'Moscovium', '(290)', 'Lv', 'Livermorium', '(293)',
  65.   'Ts', 'Tennessine', '(294)', 'Og', 'Oganesson', '(294)');
  66.  
  67. var
  68.   Elements : array[0..pred(TABLE_SIZE)] of record
  69.     Symbol     : string;
  70.     Name       : string;
  71.     Mass       : string;
  72.   end absolute TABLE_DATA;  { absolute, don't program without it !! }
  73.  
  74. var
  75.   i : integer;
  76.  
  77. begin
  78.   for i := low(Elements) to High(Elements) do
  79.   begin
  80.     with Elements[i] do
  81.     begin
  82.       writeln(Symbol:4, '  ', Name:24, '  ', Mass:12, '  ', i + 1:4);
  83.     end;
  84.   end;
  85.  
  86.   readln;
  87. end.
  88.  
(FPC v3.0.4 and Lazarus 1.8.2) or (FPC v3.2.2 and Lazarus v4.0rc3) on Windows 7 SP1 64bit.

VisualLab

  • Hero Member
  • *****
  • Posts: 686
Re: Periodic Table
« Reply #3 on: May 19, 2025, 01:02:54 pm »
From the point of view of usability (ergonomy) of using data from the periodic table of elements, the Fibonacci method is the most useful. However, it would be more convenient (optimal) to define the Mass field as double. And it would be best to load this data from a CSV file into an array of records.

And even more optimal would be to store physicochemical properties in a single file, without their names. It would be best to store the names of elements in a separate CSV file, for the specific language used in the program. Of course, it all depends on what data about elements is needed and what it is used for.

Code: Pascal  [Select][+][-]
  1. type
  2.   TChemicalElement = record
  3.     Symbol, Name: String;
  4.     Mass: Double;
  5.   end;
  6.  
  7. const
  8.   SChemicalElements: array of TChemicalElement =
  9.        ((Symbol: 'H';  Name: 'Hydrogen'; Mass: 1.00794),
  10.         (Symbol: 'He'; Name: 'Helium'; Mass: 4.002602),
  11.         ...
  12.         (Symbol: 'Og'; Name: 'Oganesson'; Mass: 294));
  13.  

Gigatron

  • Sr. Member
  • ****
  • Posts: 280
  • Amiga Rulez !!
Re: Periodic Table
« Reply #4 on: May 19, 2025, 01:24:22 pm »

You are all nice, however good goal is to help those who are new to pascal in beginners section.

At first I wanted to use a loader to load the text in a stringlist, let's say I simplified the code. Seriously, I would have to code a program that allows me to discover this periodic table....
When www is going OFF for many days :)

Thank you @Fibonacci , @440bx, @VisualLab for your codes.

Sub Quantum Technology ! Gigatron 68000 Colmar France;

VisualLab

  • Hero Member
  • *****
  • Posts: 686
Re: Periodic Table
« Reply #5 on: May 19, 2025, 01:38:19 pm »
You are all nice, however good goal is to help those who are new to pascal in beginners section.

I wonder how many chemist-programmers are on this forum who would need some chemistry-related classes, components or controls (apart from one)? Or programmers who use Object Pascal and need some chemistry-related class library. Chemistry and programming are a rather rare combination.

 

TinyPortal © 2005-2018