(Hărțile de control)
(Dedicat Anului Internațional al Tabelului Perioadelor elementelor chimice)
(Ultimele adăugiri au fost făcute pe 8 aprilie 2019. Lista adăugărilor imediat sub titlu)

(, )
Îmi amintesc că am studiat rața. Au fost trei lecții: geografie, științe naturale și limba rusă. La lecția de științe naturale, rața a fost studiată ca rață: ce fel de aripi are, ce fel de labe are, cum înoată și așa mai departe. La lecția de geografie, aceeași rață a fost studiată ca un locuitor al globului: trebuia să arătăm pe hartă unde trăiește și unde nu. La limba rusă, Serafima Petrovna ne-a învățat să scriem „r-a-ța” și citea ceva despre rațe din Brehm. Pe calea asta, ne-a spus că rața se numește într-un anumit fel în germană și în alt fel în franceză. Se părea că acest lucru se numea atunci „metodă complexă”. În general, totul se întâmpla în treacăt.
Veniamin Kaveryn, Doi capitani
În citatul menționat, Veniamin Kaveryn a arătat cu măiestrie dezavantajele metodei complexe de învățare, însă în anumite cazuri (poate destul de rare) elementele acestei metode pot fi justificate. Un astfel de caz este Tabelul Perioadelor D.I. Mendeleev la lecțiile de informatică din școală. Sarcina automatizării programatice a acțiunilor tipice cu tabelul lui Mendeleev este vizibilă pentru elevi, care au început să studieze chimia, și se împarte în multe sarcini chimice tipice. În același timp, în contextul informaticii, această sarcină permite o demonstrație simplă a metodei hărților de control, care poate fi considerată un programare grafică, înțeleasă în sens larg ca programare prin intermediul elementelor grafice.
(8 aprilie 2019 adăugiri:
Vom începe cu sarcina de bază. În cel mai simplu caz, pe ecran, în forma feronerie, ar trebui să fie afișată Tabelul Perioadelor, unde în fiecare celulă va fi simbolul chimic al elementului: H — hidrogen, He — heliu etc. Dacă cursorul mouse-ului indică o celulă, în câmpul special de pe forma noastră se va afișa simbolul elementului și numărul său. Dacă utilizatorul apasă atunci butonul stâng al mouse-ului, într-un alt câmp al formei se vor indica simbolul și numărul acestui element selectat.

Problema poate fi rezolvată folosind orice limbaj de programare universal. Vom folosi simplu vechiul Delphi-7, care este înțeles de aproape toată lumea. Dar înainte de a programa în limbajul de programare, vom desena două imagini, de exemplu, în Photoshop. În primul rând, vom desena Tabla Perioadelor așa cum dorim să o vedem în program. Vom salva rezultatul într-un fișier grafic table01.bmp.

Pentru a doua imagine, vom folosi prima. Vom umple treptat celulele tabelului, curățate de orice grafică, cu culori unice în modelul de culori RGB. R și G vor fi întotdeauna 0, iar B=1 pentru hidrogen, 2 pentru heliu etc. Această imagine va fi harta noastră de control, pe care o vom salva în fișier sub numele table2.bmp.

Prima etapă a programării grafice în Photoshop a fost finalizată. Să trecem la programarea grafică GUI în IDE Delphi-7. Pentru aceasta deschidem un nou proiect, unde pe forma principală plasăm un buton pentru a apela dialogul (tableDlg), în care va avea loc lucrul cu tabelul. Apoi lucrăm cu forma tableDlg.
Plasăm pe formă componenta clasei TImage. Obținem Image1. Să notăm că, în general, pentru proiecte mari, numele generate automat de tipul ImageN, unde N pot ajunge la câteva zeci sau mai mult — nu este cel mai bun stil de programare, și ar trebui să dăm nume mai semnificative. Dar, în proiectul nostru mic, unde N nu va depăși 2, putem să lăsăm așa cum a fost generat.
În proprietatea Image1.Picture încărcăm fișierul table01.bmp. Creăm Image2 și încărcăm acolo harta noastră de control table2.bmp. În acest timp, facem fișierul mic și invizibil pentru utilizator, așa cum este arătat în colțul din stânga jos al formei. Adăugăm elemente suplimentare de control, ale căror funcții sunt evidente. A doua etapă a programării grafice GUI în IDE Delphi-7 a fost finalizată.

Trecem la a treia etapă — scrierea codului în IDE Delphi-7. Modulul constă doar din cinci handleri de evenimente: crearea formei (FormCreate), mișcarea cursorului pe Image1 (Image1MouseMove), apăsarea LMB pe celulă (Image1Click) și ieșirea din dialog cu ajutorul butoanelor OK (OKBtnClick) sau Cancel (CancelBtnClick). Titlurile acestor handleri sunt generate standard folosind IDE.
Codul sursă al modulului:
unit tabelăUnit;
// Tabla periodică a elementelor chimice D.I. Mendeleev
//
// third112
// https://habr.com/ro/users/third112/
//
// Cuprins
// 1) creare formular
// 2) lucrul cu tabela: indicare și selecție
// 3) ieșire din dialog
interface
uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,
Buttons, ExtCtrls;
const
dimensiune = 104; // numărul de elemente
type
TtableDlg = class(TForm)
OKBtn: TButton;
CancelBtn: TButton;
Bevel1: TBevel;
Image1: TImage; // tabelă a elementelor chimice
Label1: TLabel;
Image2: TImage; // hartă de control
Label2: TLabel;
Edit1: TEdit;
procedure FormCreate(Sender: TObject); // creare formular
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); // indicare celulă
procedure Image1Click(Sender: TObject); // selecție celulă
procedure OKBtnClick(Sender: TObject); // OK
procedure CancelBtnClick(Sender: TObject); // Cancel
private
{ Declarații private }
TableSymbols : array [1..dimensiune] of string [2]; // masiv de simboluri ale elementelor
public
{ Declarații publice }
elementSelectat : string; // element selectat
currNr : integer; // numărul curent al elementului
end;
var
tableDlg: TtableDlg;
implementation
{$R *.dfm}
const
PeriodicTableStr1=
'HHeLiBeBCNOFNeNaMgAlSiPSClArKCaScTiVCrMnFeCoNiCuZnGaGeAsSeBrKrRbSrYZrNbMoTcRuRhPdAgCdInSnSbTeIXeCsBaLa';
PeriodicTableStr2='CePrNdPmSmEuGdTbDyHoErTmYbLu';
PeriodicTableStr3='HfTaWReOsIrPtAuHgTlPbBiPoAtRnFrRaAc';
PeriodicTableStr4='ThPaUNpPuAmCmBkCfEsFmMdNoLrKu ';
// creare formular ==================================================
procedure TtableDlg.FormCreate(Sender: TObject);
// creare formular
var
s : string;
i,j : integer;
begin
currNr := 0;
// inițializarea masivului de simboluri ale elementelor:
s := PeriodicTableStr1+ PeriodicTableStr2+PeriodicTableStr3+PeriodicTableStr4;
j := 1;
for i :=1 to dimensiune 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 ____________________________________________________
// lucrul cu tabela: indicare și selecție =========================================
procedure TtableDlg.Image1MouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
// indicare celulă
var
sl : integer;
begin
sl := GetBValue(Image2.Canvas.Pixels [x,y]);
if sl in [1..dimensiune] then
begin
Label1.Caption := intToStr (sl)+ ' '+TableSymbols [sl];
currNr := sl;
end
else
Label1.Caption := 'Selectați element:';
end; // Image1MouseMove ____________________________________________________
procedure TtableDlg.Image1Click(Sender: TObject);
begin
if currNr 0 then
begin
elementSelectat := TableSymbols [currNr];
Label2.Caption := intToStr (currNr)+ ' '+elementSelectat+ ' selectat';
Edit1.Text := elementSelectat;
end;
end; // Image1Click ____________________________________________________
// ieșire din dialog ==================================================
procedure TtableDlg.OKBtnClick(Sender: TObject);
begin
elementSelectat := Edit1.Text;
hide;
end; // OKBtnClick ____________________________________________________
procedure TtableDlg.CancelBtnClick(Sender: TObject);
begin
hide;
end; // CancelBtnClick ____________________________________________________
end.În versiunea noastră, am folosit un tabel de dimensiune 104 elemente (constantă dimensiune). Evident, această dimensiune poate fi mărită. Denumirile elementelor (simboluri chimice) sunt scrise într-un tablou TableSymbols. Totuși, din motive de compactitate a codului sursă, pare mai rațional să scriem secvența acestor denumiri ca constante de tip șir PeriodicTableStr1,…, PeriodicTableStr4, astfel încât, la evenimentul creării formei, programul să distribuie aceste denumiri în elementele tabloului. Fiecare denumire de element este compusă din una sau două litere latine, prima literă fiind majusculă, iar a doua (dacă există) fiind minusculă. Această regulă simplă este implementată la încărcarea tabloului. Astfel, secvența de denumiri poate fi scrisă într-un mod compact, fără spații. Împărțirea secvenței în patru părți (constante PeriodicTableStr1,…, PeriodicTableStr4) este determinată de considerente de comoditate în citirea codului sursă, deoarece o linie prea lungă poate să nu încapă pe ecran.
La evenimentul deplasării mouse-ului peste Image1 handler Image1MouseMove acestui eveniment determină valoarea componentei albastre a culorii pixelului din harta de control Image2 pentru coordonatele curente ale cursorului. Prin construcție, Image2 această valoare este egală cu numărul elementului, dacă cursorul se află în celulă; zero, dacă se află pe margine, și 255 în alte cazuri. Celelalte acțiuni efectuate de program sunt triviale și nu necesită explicații.
În plus față de tehnicile stilistice menționate anterior în programare, merită menționat stilul comentariilor. Strictețea cu care a fost analizat codul este atât de mică și simplă încât comentariile nu par a fi foarte necesare. Cu toate acestea, acestea au fost adăugate și din motive metodologice — codul scurt permite formularea mai clară a unor concluzii generale. În codul prezentat este declarat un singur clasă (TtableDlg). Metodele acestei clase pot fi schimbate între ele și acest lucru nu va afecta funcționarea programului, dar poate influența lizibilitatea acestuia. De exemplu, să ne imaginăm secvența:
OKBtnClick, Image1MouseMove, FormCreate, Image1Click, CancelBtnClick.
Poate că nu este foarte evident, dar va deveni puțin mai greu de citit și de înțeles. Dacă numărul metodelor nu este cinci, ci de zeci de ori mai mult și în secțiunea implementation Ei au un complet alt ordin de desfășurare, diferit de descrierile claselor, astfel că haosul va continua să crească. Prin urmare, deși este greu de dovedit riguros și poate fi chiar imposibil, putem spera că stabilirea unui ordini suplimentare va îmbunătăți lizibilitatea codului. Această ordine suplimentară este facilitată de gruparea logică a mai multor metode care îndeplinesc sarcini apropiate. Fiecare grup ar trebui să aibă un titlu, de exemplu:
// работа с таблицей: указание и выбор
Aceste titluri ar trebui copiate la începutul modulului și prezentate ca un cuprins. În unele cazuri de module destul de lungi, astfel de cuprinsuri oferă oportunități suplimentare de navigare. Similar, în corpul lung al unei metode, proceduri sau funcții, ar trebui, pe de o parte, să se marcheze sfârșitul acestuia:
end; // FormCreateiar, pe de altă parte, în instrucțiunile ramificate cu paranteze programatice begin – end, să se marcheze instrucțiunea la care se referă paranteza închisă:
end; // if s [j] in
end; // for i :=1
end; // FormCreate
Pentru a evidenția titlurile grupurilor și sfârșiturile corpurilor metodelor, se pot adăuga linii care depășesc lungimea celor mai multe instrucțiuni și constau, de exemplu, din caracterele „=” și „_” respectiv.
Trebuie menționat din nou că avem un exemplu prea simplu. Când codul unei metode nu încap pe un singur ecran, în cele șase end-uri consecutive, poate fi dificil să te descurci pentru a face modificări ale codului. În unele compilatoare mai vechi, de exemplu, Pascal 8000 pentru OS IBM 360/370, în listing era tipărită pe partea stângă o coloană de serviciu de tipul
B5
…
E5
Aceasta însemna că paranteza programatică închisă de pe linia E5 corespunde parantezei deschise de pe linia B5.
Desigur, stilul de programare este o chestiune foarte ambiguă, astfel că ideile exprimate aici ar trebui considerate mai mult ca informații de reflectare. Două programatori suficient de experimentați, care pe parcursul anilor s-au obișnuit cu diferite stiluri, pot avea dificultăți în a ajunge la un acord. O altă situație este cea a unui elev care învață să programeze și care nu a avut timp să își formeze propriul stil. Cred că în acest caz, profesorul ar trebui să transmită elevilor săi măcar această idee simplă, dar nu întotdeauna evidentă, că succesul programului depinde în mare măsură de stilul în care este scris codul sursă. Elevul poate să nu urmeze stilul recomandat, dar măcar să se gândească la necesitatea unor „acțiuni suplimentare” pentru a îmbunătăți aspectul codului sursă.
Revenind la sarcina noastră de bază legată de Tabla Periodică: dezvoltarea ulterioară poate merge în diferite direcții. Una dintre direcții este referința: atunci când cursorul mouse-ului este plasat peste o celulă din tabel, apare o fereastră informativă care conține informații suplimentare despre elementul specificat. Dezvoltarea ulterioară implică filtre. De exemplu, în funcție de setările din fereastra informativă, pot apărea doar: cele mai importante informații fizico-chimice, informații despre istoria descoperirii, informații despre răspândirea în natură, lista celor mai importante compuși (în care este inclus acest element), proprietățile fiziologice, denumirea în limbile străine etc. Amintind de „rața” lui Kaverin, cu care începe acest articol, se poate spune că printr-o astfel de dezvoltare a programului obținem un complex educațional complet în științele naturale: pe lângă informatică, fizică și chimie — biologie, geografie economică, istoria științei și chiar limbi străine.
Dar baza de date locală nu este limita. Programul se conectează natural la Internet. Atunci când alege un element, se activează un link, iar în fereastra browser-ului web se deschide un articol Wikipedia despre acel element. Wikipedia, după cum se știe, nu este o sursă autoritară. Se pot defini linkuri către surse autoritare, cum ar fi enciclopedia chimică, BSE, reviste de referință, cereri de căutare despre acel element etc. Astfel, elevii vor putea efectua sarcini simple, dar relevante, pe teme legate de SGBD și Internet.
Pe lângă cererile pentru un element individual, se poate crea o funcționalitate care va marca, de exemplu, celulele din tabel cu culori diferite, corespunzătoare unor criterii specifice. De exemplu, metale și nemetale. Sau celulele pe care le varsă în ape uzinele chimice locale.
De asemenea, putem implementa funcții pentru un organizer-agendă. De exemplu, să evidențiem în tabel elementele care fac parte din examen. Apoi, să marcăm elementele studiate/revizuite de elev în pregătirea pentru examen.
Iată, de exemplu, una dintre problemele tipice de chimie școlară:
Se dau 10 g de cretă. Cât acid clorhidric trebuie să folosim pentru a dizolva toată această cretă?
Pentru a rezolva această problemă, trebuie să scriem reacția chimică și să stabilim coeficienții, apoi să calculăm greutățile moleculare ale carbonatului de calciu și ale acidului clorhidric, apoi să formulăm și să rezolvăm proporția. Calcularea și rezolvarea va putea fi realizată de un calculator bazat pe programul nostru de bază. Totuși, va trebui să avem în vedere că trebuie să folosim acidul într-o cantitate rezonabilă și la o concentrație rezonabilă, dar aceasta este deja chimie, nu informatică.
Adăugire 1: cum funcționează calculatorul chimicVom analiza funcționarea calculatorului folosind exemplul problemei de mai sus cu creta și acidul clorhidric. Să începem cu reacția:
CaCO3 + 2HCl = CaCl2 + H2O
Aici vedem că avem nevoie de greutățile atomice ale următoarelor elemente: calciu (Ca), carbon (C), oxigen (O), hidrogen (H) și clor (Cl). În cel mai simplu caz, putem înregistra aceste greutăți într-un vector unidimensional, definit ca
AtomicMass : array [1..size] of real;unde indexul vectorului corespunde numărului elementului. De asemenea, pe un loc liber al formei tableDlg vom plasa două câmpuri. În primul câmp este scris inițial: „Primul reagent dat”, în al doilea — „Al doilea reagent să găsească x”. Să denumim câmpurile reagent1, reagent2 respectiv. Alte adăugiri la program vor fi clare din următorul exemplu de lucru al calculatorului.
Introducem pe tastatura computerului: 10 g. Textul din câmp reagent1 se schimbă: „Primul reagent dat 10 g”. Acum introducem formula acestui reagent, iar calculatorul va calcula și va afișa greutatea sa moleculară pe măsură ce introducem.
Facem click stânga pe celula din tabel cu simbolul Ca. Textul din câmp reagent1 se schimbă: „Primul reagent Ca 40.078 dat 10 g”.
Facem click stânga pe celula din tabel cu simbolul C. Textul din câmp reagent1 se schimbă: „Primul reagent CaC 52.089 dat 10 g”. Adică, calculatorul a adunat greutățile atomice ale calciului și carbonului.
Facem clic stânga pe celula tabelului cu simbolul O. Textul din câmp reagent1 se schimbă: „Primul reactiv CaCO 68.088 dat 10 g”. Calculatorul a adăugat la sumă greutatea atomică a oxigenului.
Facem clic stânga pe celula tabelului cu simbolul O. Textul din câmp reagent1 se schimbă: „Primul reactiv CaCO2 84.087 dat 10 g”. Calculatorul a adăugat din nou la sumă greutatea atomică a oxigenului.
Facem clic stânga pe celula tabelului cu simbolul O. Textul din câmp reagent1 se schimbă: „Primul reactiv CaCO3 100.086 dat 10 g”. Calculatorul a adăugat din nou la sumă greutatea atomică a oxigenului.
Facem clic Enter pe tastatura computerului. Introducerea primului reactiv este completă și trece la câmpul reagent2. Să menționăm că în acest exemplu oferim versiunea minimă. Dacă doriți, puteți organiza cu ușurință multiplicatori de atomi de același tip, astfel încât, de exemplu, să nu fie necesar să faceți clic de șapte ori consecutiv pe celula de oxigen atunci când introduceți formula cromatului (K2Cr2O7).
Facem clic stânga pe celula tabelului cu simbolul H. Textul din câmp reagent2 se schimbă: „Al doilea reactiv H 1.008 găsiți x”.
Facem clic stânga pe celula tabelului cu simbolul Cl. Textul din câmp reagent2 se schimbă: „Al doilea reactiv HCl 36.458 găsiți x”. Calculatorul a adunat greutățile atomice ale hidrogenului și clorului. În ecuația de reacție de mai sus, înainte de acidul clorhidric, se află coeficientul 2. Prin urmare, facem clic stânga pe câmpul reagent2. Greutatea moleculară este dublată (prin dublarea clicului devine triplicată etc.). Textul din câmp reagent2 se schimbă: „Al doilea reactiv 2HCl 72.916 găsiți x”.
Facem clic Enter pe tastatura computerului. Introducerea celui de-al doilea reactiv este completă, iar calculatorul găsește x din proporție

Ceea ce trebuia găsit.
Notă 1. Sensul proporției obținute: pentru a dizolva 100.086 de var ar fi nevoie de 72.916 Da de acid, iar pentru a dizolva 10 g de var este nevoie de x acid.
Notă 2. Culegeri de probleme asemănătoare:
Homcenko I. G., Culegere de probleme și exerciții de chimie 2009 (clasele 8-11).
Homcenko G. P., Homcenko I. G., Culegere de probleme de chimie pentru cei care intră în universități, 2019.
Notă 3. Pentru a simplifica problema, în versiunea inițială se poate simplifica introducerea formulei și pur și simplu se poate adăuga simbolul elementului la finalul șirului formulei. Atunci formula carbonatului de calciu va avea forma:
CaCOOO
Dar o astfel de notare nu va plăcea probabil profesorului de chimie. E ușor de corectat notația corectă — pentru aceasta trebuie adăugat un tablou:
formula : array [1..size] of integer;unde indexul este numărul elementului chimic, iar valoarea corespunzătoare acestui index este numărul de atomi (inițial, toate elementele din masiv sunt setate la zero). Trebuie să ținem cont de ordinea în care sunt scriși atomii în formulă, așa cum este acceptat în chimie. De exemplu, O3CaC nu va plăcea prea mult. Să trecem responsabilitatea asupra utilizatorului. Creăm un masiv:
formulaOrder : array [1..size] of integer; // se poate face mai scurtunde scriem numărul elementului chimic conform indexului său în formulă. Adăugarea atomului currNo în formulă:
if formula [currNo]=0 then // acest atom a apărut pentru prima dată
begin
orderIndex := orderIndex+1; // la începutul introducerii formulei orderIndex=0
formulaOrder [orderIndex] := currNo;
end;
formula [currNo]:=formula [currNo]+1;Scrierea formulei într-un șir:
s := ''; // șirul gol pentru formulă
for i:=1 to orderIndex do // pentru toate simbolurile chimice din formulă
begin
s:=s+TableSymbols [ formulaOrder[i]]; // adăugăm simbolul chimic
if formula [formulaOrder[i]]1 then // adăugăm numărul atomilor
s:=s+ intToStr(formula [formulaOrder[i]]);
end;
Notă 4. Are sens să se asigure posibilitatea introducerii alternative a formulei reactivului de la tastatură. În acest caz, va trebui să realizăm un parser sintactic simplu.
Merită menționat că:
Astăzi există câteva sute de variante ale tabelului, în timp ce oamenii de știință propun în mod constant noi variante. ()
Elevii pot arăta ingeniozitate în această direcție, realizând o variantă dintre cele deja propuse sau încercând să-și creeze una originală. Poate părea că aceasta este cea mai puțin utilă direcție pentru lecțiile de informatică. Totuși, în forma realizată în acest articol a Tabelului Perioadei, unii elevi pot să nu observe avantajele deosebite ale hărților de control față de soluția alternativă folosită cu butoane standard. TButton. Forma spiralată a tabelului (unde celulele au forme diferite) va demonstra mai clar avantajele soluției propuse aici.

(, )
Să adăugăm, de asemenea, că despre unele dintre programele de calculator existente pentru Tabelul lui Mendeleev s-a discutat recent într-o publicație pe Habr. .
Adaos 2: exemple de sarcini pentru filtrePrin intermediul filtrului se pot rezolva, de exemplu, următoarele sarcini:
1) Să evidențiem în tabel toate elementele cunoscute în Evul Mediu.
2) Să evidențiem toate elementele cunoscute până la descoperirea legii perioadei.
3) Identificați șapte elemente pe care alchimiștii le considerau metale.
4) Identificați toate elementele care se află în stare gazoasă în condiții normale (c.n.).
5) Identificați toate elementele care se află în stare lichidă în c.n.
6) Identificați toate elementele care se află în stare solidă în c.n.
7) Identificați toate elementele care pot rămâne mult timp în contact cu aerul fără modificări vizibile în c.n.
8) Identificați toate metalele care se dizolvă în acid clorhidric.
9) Identificați toate metalele care se dizolvă în acid sulfuric în c.n.
10) Identificați toate metalele care se dizolvă în acid sulfuric la încălzire.
11) Identificați toate metalele care se dizolvă în acid azotic.
12) Identificați toate metalele care reacționează violent cu apa în c.n.
13) Identificați toate metalele.
14) Identificați elementele care sunt răspândite pe scară largă în natură.
15) Identificați elementele care se găsesc în natură în stare liberă.
16) Identificați elementele care joacă un rol esențial în organismul uman și animal.
17) Identificați elementele care sunt utilizate pe scară largă în viața cotidiană (în stare liberă sau în compuși).
18) Identificați elementele cu care lucrul este cel mai periculos și necesită măsuri speciale de protecție.
19) Identificați elementele care, în stare liberă sau sub formă de compuși, reprezintă cea mai mare amenințare pentru ecologie.
20) Identificați metalele prețioase.
21) Identificați elementele care sunt mai scumpe decât metalele prețioase.
Note
1) Are sens să asigurați funcționarea mai multor filtre. De exemplu, dacă activați filtrul pentru rezolvarea problemei 1 (toate elementele cunoscute în Evul Mediu) și 20 (metale prețioase), vor fi evidențiate (de exemplu, prin culoare) celulele cu metale prețioase cunoscute în Evul Mediu (nu va fi evidențiat, de exemplu, paladiu, descoperit în 1803).
2) Este logic să se asigure funcționarea mai multor filtre în așa fel încât fiecare filtru să evidențieze celulele cu o anumită culoare, dar să nu elimine complet evidențierea altui filtru (o parte din celulă cu o culoare, partea cealaltă cu alta). Astfel, în cazul exemplului anterior, vor fi vizibile elementele intersecției mulțimilor deschise în Evul Mediu și ale metalelor prețioase, precum și elementele care aparțin numai primei și numai celei de-a doua mulțimi. Adică metalele prețioase, necunoscute în Evul Mediu, și elementele cunoscute în Evul Mediu, dar care nu sunt metale prețioase.
3) Este logic, după aplicarea filtrului, să se asigure posibilitatea de a efectua alte opere cu rezultatele obținute. De exemplu, evidențiind elementele cunoscute în Evul Mediu, utilizatorul face clic stânga pe elementul evidențiat și ajunge la articolul Wikipedia despre acel element.
4) Este logic să se asigure posibilitatea ca utilizatorul să elimine evidențierea printr-un clic stâng pe celula evidențiată a tabelului. De exemplu, pentru a elimina elementele deja vizualizate.
5) Este logic să se asigure salvarea listei de celule evidențiate într-un fișier și încărcarea unui astfel de fișier cu evidențierea automată a celulelor. Aceasta va oferi utilizatorului posibilitatea de a face o pauză în muncă.
Am folosit o hartă de control statică presetată, însă există multe sarcini importante unde pot fi utilizate hărți de control dinamice, care se schimbă pe parcursul desfășurării programului. Un exemplu poate fi un editor de grafuri, în care utilizatorul indică cu mouse-ul în fereastra pozițiile vârfurilor și desenează muchii între acestea. Pentru a elimina un vârf sau o muchie, utilizatorul trebuie să indice către acesta. Dar dacă este destul de ușor să indicăm un vârf marcat cu un cerc, va fi mai greu să indicăm o muchie desenată cu o linie subțire. Aici va ajuta harta de control, unde vârfurile și muchiile ocupă o vecinătate mai largă decât în desenul vizibil.
O întrebare interesantă, legată de metoda de învățare complexă, este: poate fi această metodă utilă în instruirea IA?
Sursa: habr.com
