unit tableUnit;
// Периодическая таблица химических элементов Д.И.Менделеева
//
// third112
// https://habr.com/ru/users/third112/
//
// Оглавление
// 1) создание формы
// 2) работа с таблицей: указание и выбор
// 3) выход из диалога
interface
uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,
Buttons, ExtCtrls;
const
size = 104; // число элементов
type
TtableDlg = class(TForm)
OKBtn: TButton;
CancelBtn: TButton;
Bevel1: TBevel;
Image1: TImage; //таблица химических элементов
Label1: TLabel;
Image2: TImage; //управляющая карта
Label2: TLabel;
Edit1: TEdit;
procedure FormCreate(Sender: TObject); // создание формы
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); // указание клетки
procedure Image1Click(Sender: TObject); // выбор клетки
procedure OKBtnClick(Sender: TObject); // OK
procedure CancelBtnClick(Sender: TObject); // Cancel
private
{ Private declarations }
TableSymbols : array [1..size] of string [2]; // массив обозначений элементов
public
{ Public declarations }
selectedElement : string; // выбранный элемент
currNo : integer; // текущий номер элемента
end;
var
tableDlg: TtableDlg;
implementation
{$R *.dfm}
const
PeriodicTableStr1=
'HHeLiBeBCNOFNeNaMgAlSiPSClArKCaScTiVCrMnFeCoNiCuZnGaGeAsSeBrKrRbSrYZrNbMoTcRuRhPdAgCdInSnSbTeIXeCsBaLa';
PeriodicTableStr2='CePrNdPmSmEuGdTbDyHoErTmYbLu';
PeriodicTableStr3='HfTaWReOsIrPtAuHgTlPbBiPoAtRnFrRaAc';
PeriodicTableStr4='ThPaUNpPuAmCmBkCfEsFmMdNoLrKu ';
// создание формы ==================================================
procedure TtableDlg.FormCreate(Sender: TObject);
// создание формы
var
s : string;
i,j : integer;
begin
currNo := 0;
// инициализация массива обозначений элементов:
s := PeriodicTableStr1+ PeriodicTableStr2+PeriodicTableStr3+PeriodicTableStr4;
j := 1;
for i :=1 to size do
begin
TableSymbols [i] := s[j];
inc (j);
if s [j] in ['a'..'z'] then
begin
TableSymbols [i] := TableSymbols [i]+ s [j];
inc (j);
end; // if s [j] in
end; // for i :=1
end; // FormCreate ____________________________________________________
// работа с таблицей: указание и выбор =========================================
procedure TtableDlg.Image1MouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
// указание клетки
var
sl : integer;
begin
sl := GetBValue(Image2.Canvas.Pixels [x,y]);
if sl in [1..size] then
begin
Label1.Caption := intToStr (sl)+ ' '+TableSymbols [sl];
currNo := sl;
end
else
Label1.Caption := 'Select element:';
end; // Image1MouseMove ____________________________________________________
procedure TtableDlg.Image1Click(Sender: TObject);
begin
if currNo <> 0 then
begin
selectedElement := TableSymbols [currNo];
Label2.Caption := intToStr (currNo)+ ' '+selectedElement+ ' selected';
Edit1.Text := selectedElement;
end;
end; // Image1Click ____________________________________________________
// выход из диалога ==================================================
procedure TtableDlg.OKBtnClick(Sender: TObject);
begin
selectedElement := Edit1.Text;
hide;
end; // OKBtnClick ____________________________________________________
procedure TtableDlg.CancelBtnClick(Sender: TObject);
begin
hide;
end; // CancelBtnClick ____________________________________________________
end.
زموږ په نسخه کې، موږ د 104 عناصرو جدول اخیستی) ثابت اندازه). په ښکاره ډول، دا اندازه کیدی شي زیاتوالی ومومي. د عنصر نومونه (کیمیاوي سمبولونه) په یوه صف کې لیکل شوي د جدول سمبولونه. په هرصورت، د سرچینې کوډ د مطابقت د دلیلونو لپاره، دا مشوره ورکول کیږي چې د دې یادښتونو ترتیب د سټینګ سټینټونو په بڼه ولیکئ. PeriodicTableStr1...، PeriodicTableStr4نو کله چې فورمه جوړه شي، برنامه پخپله دا ډیزاینونه د صف د عناصرو په مینځ کې ویشي. د هر عنصر نومول یو یا دوه لاتیني توري لري، لومړی توری لوی او دوهم (که کوم وي) کوچنی توری لري. دا ساده قاعده پلي کیږي کله چې یو صف پورته کوي. په دې توګه، د یادښتونو ترتیب پرته له کوم ځای څخه په لنډ ډول لیکل کیدی شي. ترتیب په څلورو برخو ویشل (ثابت PeriodicTableStr1...، PeriodicTableStr4) د سرچینې کوډ لوستلو اسانه کولو په پام کې نیولو سره دی، ځکه یوه کرښه چې ډیره اوږده وي ممکن په بشپړ ډول په سکرین کې نه وي.
کله چې د موږک کرسر په سر کې حرکت وکړي انځور1 سمبالونکی Image1MouseMove دا پیښه د کنټرول کارت پکسل د نیلي رنګ برخې ارزښت ټاکي انځور2 د اوسني کرسر همغږۍ لپاره. د ساختمان په واسطه انځور2 دا ارزښت د عنصر شمیر سره مساوي دی که چیرې کرسر د حجرې دننه وي؛ صفر که په سرحد کې وي، او په نورو قضیو کې 255. پاتې کړنې چې د برنامې لخوا ترسره کیږي کوچني دي او توضیحاتو ته اړتیا نلري.
د پورته ذکر شوي سټایلیسټیک برنامې تخنیکونو سربیره ، دا د تبصرې سټایل په پام کې نیولو سره ارزښت لري. په کلکه خبرې کول، بحث شوی کوډ دومره کوچنی او ساده دی چې نظرونه په ځانګړي ډول اړین نه ښکاري. په هرصورت، دوی د میتودولوژیکي دلایلو لپاره هم اضافه شوي - لنډ کوډ موږ ته اجازه راکوي چې ځینې عمومي پایلې په روښانه ډول وړاندې کړو. په وړاندې شوي کوډ کې یو ټولګی اعلان شوی (TableDlg). د دې ټولګي میتودونه بدل کیدی شي او دا به په هیڅ ډول د برنامه فعالیت اغیزه ونکړي ، مګر ممکن د لوستلو وړتیا اغیزه وکړي. د مثال په توګه، ترتیب تصور کړئ:
دا ممکن د پام وړ نه وي، مګر دا به د لوستلو او پوهیدو لپاره یو څه ستونزمن شي. که پنځه نه وي، مګر په برخه کې لسګونه ځله نور میتودونه د پلي دوی د ټولګي توضیحاتو په پرتله په بشپړ ډول مختلف ترتیب لري ، نو ګډوډي به یوازې وده وکړي. له همدې امله، که څه هم دا ستونزمنه ده چې په کلکه ثابت شي او حتی ناممکن وي، یو څوک تمه کولی شي چې د اضافي نظم معرفي کول به د کوډ لوستلو وړتیا ښه کړي. دا اضافي نظم د ډیری میتودونو منطقي ګروپ کولو لخوا اسانه شوی چې اړوند دندې ترسره کوي. هرې ډلې ته باید عنوان ورکړل شي، د بیلګې په توګه:
// работа с таблицей: указание и выбор
دا سرلیکونه باید د ماډل په پیل کې کاپي شي او د مینځپانګو جدول په توګه فارمیټ شي. د کافي اوږد ماډلونو په ځینو مواردو کې ، د مینځپانګو داسې جدولونه اضافي نیویګیشن اختیارونه وړاندې کوي. په ورته ډول، د یوې میتود، کړنالرې یا فعالیت په اوږد بدن کې، دا ارزښت لري، لومړی، د دې بدن پای نښه کول:
end; // FormCreate
او، دوهم، د برنامه بریکٹ سره په شاخه بیانونو کې پیل - پای، بیان په نښه کړئ کوم چې د تړلو بریکٹ اشاره کوي:
end; // if s [j] in
end; // for i :=1
end; // FormCreate
د ګروپ سرلیکونو او د میتود باډي پایونو روښانه کولو لپاره ، تاسو کولی شئ هغه کرښې اضافه کړئ چې د ډیری بیاناتو څخه اوږدې وي او د مثال په توګه په ترتیب سره د "=" او "_" حروفونو څخه جوړ وي.
یوځل بیا، موږ اړتیا لرو چې ریزرویشن وکړو: زموږ مثال خورا ساده دی. او کله چې د میتود کوډ په یوه سکرین کې مناسب نه وي ، نو د کوډ بدلونونو لپاره د شپږ پرله پسې پایونو پوهیدل ستونزمن کیدی شي. په ځینو پخوانیو تالیف کونکو کې، د مثال په توګه، د OS IBM 8000/360 لپاره Pascal 370، د دې په څیر د خدماتو کالم په لیست کې په ښي خوا کې چاپ شوی.
په خپل کمپیوټر کیبورډ کې Enter فشار ورکړئ. د دوهم ریجنټ داخلیدل بشپړ شوي، او کیلکولیټر د تناسب څخه x پیدا کوي
دا هغه څه دي چې موږ یې موندلو ته اړتیا درلوده.
یادښت.. د پایلې تناسب معنی: د تحلیل لپاره 100.086 Da چاک 72.916 دا اسید ته اړتیا لري، او د 10 ګرام چاک تحلیل لپاره تاسو x اسید ته اړتیا لرئ.
یادښت.. د ورته ستونزو ټولګه:
Khomchenko I. G.، په کیمیا کې د ستونزو او تمرینونو مجموعه 2009 (د 8-11 درجې).
Khomchenko G.P.، Khomchenko I. G.، پوهنتونونو ته د غوښتونکو لپاره په کیمیا کې د ستونزو راټولول، 2019.
یادښت.. د کار ساده کولو لپاره، تاسو کولی شئ په ابتدايي نسخه کې د فورمول داخلول ساده کړئ او په ساده ډول د عنصر سمبول د فورمول کرښې پای ته اضافه کړئ. بیا د کلسیم کاربونیټ فارمول به دا وي:
CaCOOO
مګر د کیمیا ښوونکي احتمال نلري چې دا ډول ریکارډ خوښ کړي. د سمې ننوتلو لپاره دا ستونزمنه نده - د دې کولو لپاره تاسو اړتیا لرئ یو صف اضافه کړئ:
formula : array [1..size] of integer;
چیرې چې شاخص د کیمیاوي عنصر شمیر دی، او په دې شاخص کې ارزښت د اتومونو شمیر دی (په پیل کې د صف ټول عناصر صفر ته بیا ځای پرځای شوي). هغه ترتیب چې اتومونه په فورمول کې لیکل شوي، لکه څنګه چې په کیمیا کې منل شوي، باید په پام کې ونیول شي. د مثال په توګه، لږ خلک به O3CaC خوښ کړي. راځئ چې مسؤلیت کارونکي ته واړوو. راځئ چې یو صف جوړ کړو:
formulaOrder : array [1..size] of integer; // можно взять покороче
چیرې چې موږ د کیمیاوي عنصر شمیر په فورمول کې د هغې د ظاهري شاخص له مخې لیکو. د اتوم اضافه کول کرن نمبر په فورمول کې:
if formula [currNo]=0 then //этот атом встретился первый раз
begin
orderIndex := orderIndex+1;//в начале ввода формулы orderIndex=0
formulaOrder [orderIndex] := currNo;
end;
formula [currNo]:=formula [currNo]+1;
په یوه کرښه کې د فورمول لیکل:
s := ''; // пустая строка для формулы
for i:=1 to orderIndex do // для всех хим.символов в формуле
begin
s:=s+TableSymbols [ formulaOrder[i]];// добавляем хим.символ
if formula [formulaOrder[i]]<>1 then //добавляем кол-во атомов
s:=s+ intToStr(formula [formulaOrder[i]]);
end;
یادښت.. دا د کیبورډ څخه د ریجنټ فارمول په بدیل کې د ننوتلو وړتیا چمتو کول معنی لري. پدې حالت کې ، تاسو اړتیا لرئ یو ساده پارسر پلي کړئ.
1) دا د ډیری فلټرونو چمتو کولو معنی لري. د مثال په توګه، که تاسو د ستونزې حل کولو لپاره فلټر چالان کړئ 1 (ټول عناصر په مینځنۍ پیړۍ کې پیژندل شوي) او 20 (قیمتي فلزات)، نو بیا به د قیمتي فلزونو سره حجرې روښانه شي (د بیلګې په توګه، د رنګ په واسطه) ( د مثال په توګه، پیلډیم به روښانه نه شي، په 1803 کې پرانستل شو).
2) دا معنی لري چې ډاډ ترلاسه کړئ چې څو فلټرونه په داسې حالت کې کار کوي چې هر فلټر د خپل رنګ سره حجرې غوره کوي، مګر د بل فلټر انتخاب په بشپړه توګه نه لرې کوي (د حجرې برخه په یو رنګ کې، په بل کې برخه). بیا، د پخوانۍ بیلګې په صورت کې، په منځني پیړیو او قیمتي فلزونو کې کشف شوي د سیټونو د تقاطع عناصر، او همدارنګه هغه عناصر چې یوازې په لومړي او یوازې دویم سیټونو پورې تړاو لري، لیدل کیږي. هغوی. قیمتي فلزات په منځني پیړیو کې نامعلوم دي، او عناصر چې په منځني پیړیو کې پیژندل شوي مګر قیمتي فلزات ندي.
3) دا د فلټر پلي کولو وروسته معنی لري ترڅو د ترلاسه شوي پایلو سره د نورو کار امکان یقیني کړي. د مثال په توګه، په منځني پیړیو کې د پیژندل شوي عناصرو په درلودلو سره، کاروونکي په ټاکل شوي عنصر باندې LMB کلیک کوي او د دې عنصر په اړه د ویکیپیډیا مقالې ته وړل کیږي.
4) دا معنی لري چې کارونکي ته د انتخاب شوي میز حجرې کې د LMB په کلیک کولو سره د غیر انتخاب کولو وړتیا چمتو کړئ. د مثال په توګه، مخکې له مخکې لیدل شوي توکي لرې کول.
5) دا معنی لري چې ډاډ ترلاسه شي چې د ټاکل شوي حجرو لیست په فایل کې خوندي شوی او دا ډول فایل د حجرو اتوماتیک انتخاب سره ډک شوی. دا به کارونکي ته فرصت ورکړي چې له کار څخه وقفه واخلي.
موږ یو جامد، مخکې ټاکل شوی کنټرول نقشه کارولې، مګر ډیری مهمې دندې شتون لري چیرې چې د متحرک کنټرول نقشې چې د برنامه چلولو په څیر بدلیږي کارول کیدی شي. یوه بیلګه به د ګراف مدیر وي، په کوم کې چې کاروونکي موږک کاروي ترڅو په کړکۍ کې د عمودی موقعیت په ګوته کړي او د دوی تر منځ څنډې رسم کړي. د عمودی یا څنډې د حذف کولو لپاره، کاروونکي باید ورته اشاره وکړي. مګر که دا خورا اسانه وي چې د یوې دایرې سره په نښه شوي عمودی ته اشاره وکړئ، نو بیا به دا ډیره ستونزمنه وي چې د یوې پتلې کرښې سره یو څنډې ته اشاره وکړئ. د کنټرول نقشه به دلته مرسته وکړي، چیرې چې عمودی او څنډې د لیدل شوي شکل په پرتله پراخه ګاونډیان نیسي.
د پیچلې روزنې دې میتود پورې اړوند په زړه پورې اړخ پوښتنه دا ده: ایا دا میتود د AI روزنې کې ګټور کیدی شي؟