(Mapy sterujące)
(Poświęcone Międzynarodowemu Rokowi Układu Okresowego Pierwiastków Chemicznych)
(Ostatnie uzupełnienia dokonano 8 kwietnia 2019. Lista uzupełnień znajduje się tuż pod nagłówkiem)

(, )
Pamiętam, że uczyliśmy się o kaczce. Były to od razu trzy lekcje: geografia, nauki przyrodnicze i język rosyjski. Na lekcji nauk przyrodniczych uczono nas o kaczce jako o zwierzęciu: jakie ma skrzydła, jakie nóżki, jak pływa i tak dalej. Na lekcji geografii ta sama kaczka była badana jako mieszkaniec globu: należało na mapie pokazać, gdzie żyje, a gdzie jej nie ma. Na języku rosyjskim Sierafima Pietrowna uczyła nas pisać „к-а-ц-к-а” i czytała coś o kaczkach z Brema. Przy okazji informowała nas, że po niemiecku kaczka to tak, a po francusku tak. Zdaje się, że wtedy nazywano to „metodą kompleksową”. W każdym razie, wszystko wychodziło „przy okazji”.
Weniamin Kawierin, Dwaj kapitanowie
W przytoczonym cytacie Weniamin Kawierin mistrzowsko ukazał wady metody kompleksowej nauczania, jednak w niektórych (może dość rzadkich) przypadkach elementy tej metody są uzasadnione. Jednym z takich przypadków jest Układ Okresowy D.I. Mendelejewa na lekcjach informatyki w szkołach. Zadanie automatyzacji typowych działań z tabelą Mendelejewa jest oczywiste dla uczniów, którzy zaczynają uczyć się chemii i dzieli się na wiele typowych zadań chemicznych. W tym samym czasie w ramach informatyki zadanie to pozwala w prosty sposób zademonstrować sposób map sterujących, które można zdefiniować jako programowanie graficzne, rozumiane w szerokim sensie jako programowanie za pomocą elementów graficznych.
(8 kwietnia 2019 dokonano uzupełnień:
Zacznijmy od podstawowego zadania. W najprostszym przypadku na ekranie w oknie formularza powinna być wyświetlona Układ Okresowy, gdzie w każdej komórce będzie chemiczne oznaczenie pierwiastka: H — wodór, He — hel itd. Jeśli kursor myszy wskazuje na komórkę, w specjalnym polu na naszym formularzu wyświetlane jest oznaczenie pierwiastka oraz jego numer. Jeśli użytkownik w tym czasie naciśnie LPM, w innym polu formularza zostanie wskazane oznaczenie i numer tego wybranego pierwiastka.

Zadanie można rozwiązać w każdym uniwersalnym Języku Programowania. Weźmiemy prosty, stary Delphi-7, zrozumiały prawie dla wszystkich. Ale zanim zaczniemy programować w Języku Programowania, narysujemy dwa obrazki, na przykład w Photoshopie. Po pierwsze, narysujemy Układ Periodyczny w formie, jaką chcemy zobaczyć w programie. Zapiszemy wynik w pliku graficznym table01.bmp.

Do drugiego rysunku użyjemy pierwszego. Kolejno będziemy wypełniać oczyszczone z wszelkiej grafiki komórki tabeli unikalnymi kolorami w modelu RGB. R i G zawsze będą 0, a B=1 dla wodoru, 2 dla helu itd. Ten rysunek będzie naszą mapą kontrolną, którą zapiszemy jako table2.bmp.

Pierwszy etap programowania graficznego w Photoshopie zakończony. Przechodzimy do programowania graficznego GUI w IDE Delphi-7. W tym celu otwieramy nowy projekt, w którym na główną formę umieszczamy przycisk wywołania dialogu (tableDlg), w którym będzie się odbywać praca z tabelą. Następnie pracujemy z formą tableDlg.
Umieszczamy na formie komponent klasy TImage. Otrzymujemy Image1. Zauważmy, że w ogólnym przypadku dla większych projektów automatycznie generowane nazwy typu ImageN, gdzie N mogą osiągać kilka dziesiątek i więcej — to nie jest najlepszy styl programowania, i należy nadawać bardziej znaczące nazwy. Ale w naszym małym projekcie, gdzie N nie będzie przekraczać 2, można zostawić, jak się wygenerowało.
W właściwości Image1.Picture ładujemy plik table01.bmp. Tworzymy Image2 i wczytujemy tam naszą mapę kontrolną table2.bmp. Przy tym plik robimy mały i niewidoczny dla użytkownika, jak pokazano w lewym dolnym rogu formularza. Dodajemy dodatkowe elementy kontrolne, których przeznaczenie jest oczywiste. Drugi etap programowania graficznego GUI w IDE Delphi-7 zakończony.

Przechodzimy do trzeciego etapu — pisania kodu w IDE Delphi-7. Moduł składa się z pięciu obsługiwanych zdarzeń: utworzenia formularza (FormCreate), ruchu kursora po Image1 (Image1MouseMove), naciśnięcia LPM na komórkę (Image1Click) i wyjścia z dialogu za pomocą przycisków OK (OKBtnClick) lub Anuluj (CancelBtnClick). Nagłówki tych obsługiwanych zdarzeń generowane są w standardowy sposób za pomocą IDE.
Kod źródłowy modułu:
unit tableUnit;
// Tablica okresowa pierwiastków chemicznych D.I. Mendelejewa
//
// third112
// https://habr.com/ru/users/third112/
//
// Spis treści
// 1) tworzenie formularza
// 2) praca z tabelą: wskazanie i wybór
// 3) wyjście z dialogu
interface
uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,
Buttons, ExtCtrls;
const
size = 104; // liczba elementów
type
TtableDlg = class(TForm)
OKBtn: TButton;
CancelBtn: TButton;
Bevel1: TBevel;
Image1: TImage; // tabela pierwiastków chemicznych
Label1: TLabel;
Image2: TImage; // mapa zarządzania
Label2: TLabel;
Edit1: TEdit;
procedure FormCreate(Sender: TObject); // tworzenie formularza
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); // wskazanie komórki
procedure Image1Click(Sender: TObject); // wybór komórki
procedure OKBtnClick(Sender: TObject); // OK
procedure CancelBtnClick(Sender: TObject); // Anuluj
private
{ Prywatne deklaracje }
TableSymbols : array [1..size] of string [2]; // tablica oznaczeń elementów
public
{ Publiczne deklaracje }
selectedElement : string; // wybrany element
currNo : integer; // aktualny numer elementu
end;
var
tableDlg: TtableDlg;
implementation
{$R *.dfm}
const
PeriodicTableStr1=
'HHeLiBeBCNOFNeNaMgAlSiPSClArKCaScTiVCrMnFeCoNiCuZnGaGeAsSeBrKrRbSrYZrNbMoTcRuRhPdAgCdInSnSbTeIXeCsBaLa';
PeriodicTableStr2='CePrNdPmSmEuGdTbDyHoErTmYbLu';
PeriodicTableStr3='HfTaWReOsIrPtAuHgTlPbBiPoAtRnFrRaAc';
PeriodicTableStr4='ThPaUNpPuAmCmBkCfEsFmMdNoLrKu ';
// tworzenie formularza ==================================================
procedure TtableDlg.FormCreate(Sender: TObject);
// tworzenie formularza
var
s : string;
i,j : integer;
begin
currNo := 0;
// inicjalizacja tablicy oznaczeń elementów:
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 ____________________________________________________
// praca z tabelą: wskazanie i wybór =========================================
procedure TtableDlg.Image1MouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
// wskazanie komórki
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 := 'Wybierz element:';
end; // Image1MouseMove ____________________________________________________
procedure TtableDlg.Image1Click(Sender: TObject);
begin
if currNo 0 then
begin
selectedElement := TableSymbols [currNo];
Label2.Caption := intToStr (currNo)+ ' '+selectedElement+ ' wybrano';
Edit1.Text := selectedElement;
end;
end; // Image1Click ____________________________________________________
// wyjście z dialogu ==================================================
procedure TtableDlg.OKBtnClick(Sender: TObject);
begin
selectedElement := Edit1.Text;
hide;
end; // OKBtnClick ____________________________________________________
procedure TtableDlg.CancelBtnClick(Sender: TObject);
begin
hide;
end; // CancelBtnClick ____________________________________________________
end.W naszej wersji wykorzystaliśmy tablicę o rozmiarze 104 elementów (stała rozmiar). Oczywiście rozmiar ten można zwiększyć. Oznaczenia elementów (symbole chemiczne) zapisujemy w tablicy TableSymbols. Jednak ze względów kompaktowości kodu źródłowego, sensowne wydaje się zapisanie sekwencji tych oznaczeń w postaci stałych tekstowych PeriodicTableStr1,…, PeriodicTableStr4, aby w momencie tworzenia formularza program sam rozdzielił te oznaczenia na elementy tablicy. Każde oznaczenie elementu składa się z jednej lub dwóch liter łacińskich, przy czym pierwsza litera jest wielka, a druga (jeśli występuje) mała. Ta prosta zasada jest realizowana przy ładowaniu tablicy. W ten sposób sekwencję oznaczeń można zapisać w skompresowanej formie bez spacji. Podział sekwencji na cztery części (stałe PeriodicTableStr1,…, PeriodicTableStr4) wynika z względów czytelności kodu źródłowego, ponieważ zbyt długi wiersz może się nie zmieścić w całości na ekranie.
W momencie poruszania kursorem myszy Image1 handler Image1MouseMove tego zdarzenia określa wartość niebieskiego komponentu koloru piksela mapy sterującej Image2 dla aktualnych współrzędnych kursora. Z definicji Image2 ta wartość równa się numerowi elementu, jeśli kursor znajduje się wewnątrz komórki; zero, jeśli na granicy, a 255 w innych przypadkach. Pozostałe działania wykonywane przez program są trywialne i nie wymagają wyjaśnień.
Oprócz wymienionych powyżej stylów programowania warto zwrócić uwagę na styl komentarzy. Ścisłe mówiąc, rozważany kod jest na tyle mały i prosty, że komentarze wydają się niezbyt potrzebne. Zostały one jednak dodane również ze względów metodycznych - krótki kod pozwala lepiej zobaczyć pewne ogólne wnioski. W przedstawionym kodzie zadeklarowano jedną klasę (TtableDlg). Metody tej klasy można zamienić miejscami i nie wpłynie to na funkcjonowanie programu, ale może wpływać na jego czytelność. Na przykład, wyobraźmy sobie sekwencję:
OKBtnClick, Image1MouseMove, FormCreate, Image1Click, CancelBtnClick.
Może to nie być bardzo zauważalne, ale czytanie i zrozumienie stanie się odrobinę trudniejsze. Jeśli metod nie jest pięć, a dziesiątki razy więcej i w sekcji implementation Mają one zupełnie inny porządek niż w opisach klas, więc chaos będzie tylko narastał. Dlatego, chociaż trudno to rygorystycznie udowodnić i może być to wręcz niemożliwe, można mieć nadzieję, że wprowadzenie dodatkowego porządku poprawi czytelność kodu. Dodatkowemu porządkowi sprzyja logiczne grupowanie kilku metod, które wykonują zbliżone zadania. Każdej grupie warto nadać tytuł, na przykład:
// работа с таблицей: указание и выбор
Tytuły te warto skopiować na początek modułu i sformatować jako spis treści. W niektórych przypadkach, w przypadku wystarczająco długich modułów, takie spisy treści dostarczają dodatkowe możliwości nawigacji. Podobnie w długim ciele jednej metody, procedury lub funkcji należałoby, po pierwsze, zaznaczyć koniec tego ciała:
end; \/\/ FormCreatea po drugie, w złożonych operatorach z programowymi nawiasami begin – end należy zaznaczyć operator, do którego odnosi się zamykająca klamra:
end; \/\/ if s [j] in
end; \/\/ for i :=1
end; \/\/ FormCreate
Aby wyróżnić nagłówki grup i końce ciał metod, można dodać linie, które przewyższają długość większości operatorów i składają się na przykład z symboli „=” i „_” odpowiednio.
Ponownie należy zaznaczyć: mamy zbyt prosty przykład. A gdy kod metody nie mieści się na jednym ekranie, z sześcioma następującymi po sobie end czasami trudno jest się zorientować, aby wprowadzić zmiany w kodzie. W niektórych starszych kompilatorach, na przykład, Pascal 8000 dla OS IBM 360\/370 w wydruku po lewej stronie drukowana była służbowa kolumna typu
B5
…
E5
Oznaczało to, że zamykająca programowa klamra na linii E5 odpowiada otwierającej klamrze na linii B5.
Oczywiście, styl programowania to bardzo ambiwalentna kwestia, dlatego przedstawione tutaj pomysły należy traktować jako informacje do przemyślenia. Dwóm doświadczonym programistom, którzy przez wiele lat pracy przyzwyczaili się do różnych stylów, bywa bardzo trudno się porozumieć. Inaczej sprawa wygląda w przypadku ucznia programowania, który nie miał jeszcze czasu na wykształcenie własnego stylu. Myślę, że w tym przypadku nauczyciel powinien przynajmniej zakomunikować swoim uczniom taką prostą, ale nieoczywistą myśl, że sukces programu w dużej mierze zależy od stylu, w jakim napisany jest jego kod źródłowy. Uczeń może nie być w stanie podążać za zalecanym stylem, ale niech przynajmniej rozważy konieczność „dodatkowych” działań na rzecz poprawy estetyki kodu źródłowego.
Wracając do naszej podstawowej kwestii dotyczącej układu okresowego: dalszy rozwój może przebiegać w różnych kierunkach. Jednym z kierunków może być dodanie informacji: po najechaniu kursorem myszy na komórkę tabeli pojawia się okno z informacjami zawierające dodatkowe dane o wskazanym pierwiastku. Dalszy rozwój to filtry. Na przykład w zależności od ustawień w oknie informacyjnym będzie tylko: najważniejsze informacje fizyko-chemiczne, historia odkrycia, informacje o występowaniu w przyrodzie, lista najważniejszych związków chemicznych (do których należy dany pierwiastek), właściwości fizjologiczne, nazwa w języku obcym itd. Przypominając „kaczkę” Kawerina, od której zaczyna się ten artykuł, można stwierdzić, że przy takim rozwoju programu uzyskamy kompleksowy system edukacyjny w dziedzinie nauk przyrodniczych: oprócz informatyki, fizyki i chemii – biologia, geografia ekonomiczna, historia nauki, a nawet języki obce.
Jednak lokalna baza danych to nie koniec. Program w naturalny sposób łączy się z Internetem. Po wybraniu pierwiastka uruchamia się link, a w oknie przeglądarki internetowej otwiera się artykuł Wikipedii na temat danego pierwiastka. Wikipedia, jak wiadomo, nie jest autorytetem. Można wskazać linki do wiarygodnych źródeł, na przykład encyklopedii chemicznej, Wielkiej Encyklopedii Sovetskoi, czasopism referencyjnych, zlecić zapytania w wyszukiwarkach na temat danego pierwiastka itd. Dzięki temu uczniowie będą mogli wykonywać proste, ale treściwe zadania związane z tematyką baz danych i Internetu.
Oprócz zapytań dotyczących pojedynczego elementu, można stworzyć funkcjonalność, która będzie oznaczała, na przykład, różnymi kolorami komórki w tabeli, odpowiadające określonym kryteriom. Na przykład, metale i niemetale. Lub komórki, które zrzuca do zbiorników wodnych lokalna fabryka chemiczna.
Można również zrealizować funkcje notatnika-organizera. Na przykład, wyróżnić w tabeli elementy, które wchodzą w skład egzaminu. Następnie zaznaczać elementy, które uczeń powtórzył podczas przygotowań do egzaminu.
A oto, na przykład, jedno z typowych zadań szkolnej chemii:
Dano 10 g kredy. Ile kwasu solnego należy wziąć, aby rozpuścić całą tę kredę?
Aby rozwiązać to zadanie, trzeba zapisać reakcję chemiczną i ustawić w niej współczynniki, obliczyć masy molekularne węglanu wapnia i kwasu solnego, a następnie zbudować i rozwiązać proporcję. Kalkulator oparty na naszej podstawowej programie będzie w stanie to policzyć i rozwiązać. Należy jednak również uwzględnić, że kwas należy wziąć w rozsądnym nadmiarze i w rozsądnej koncentracji, ale to już chemia, a nie informatyka.
Uzupełnienie 1: jak działa kalkulator chemicznyRozważmy działanie kalkulatora na przykładzie podanego powyżej zadania z kredą i „solanką”. Zacznijmy od reakcji:
CaCO3 + 2HCl = CaCl2 + H2O
Stąd widzimy, że będziemy potrzebować mas atomowych następujących pierwiastków: wapnia (Ca), węgla (C), tlenu (O), wodoru (H) oraz chloru (Cl). W najprostszym przypadku możemy zanotować te masy w jednowymiarowej tablicy, określonej jako
AtomicMass : array [1..size] of real;gdzie indeks tablicy odpowiada numerowi pierwiastka. Na wolnym miejscu formularza tableDlg umieszczamy dwa pola. W pierwszym polu początkowo zapisano: “Pierwszy reagent dany”, w drugim — “Drugi reagent znaleźć x”. Oznaczmy pola reagent1, reagent2 odpowiednio. Inne dodatki do programu będą jasne z następnego przykładu działania kalkulatora.
Wpisujemy na klawiaturze komputera: 10 g. Napis w polu reagent1 zmienia się: “Pierwszy reagent dany 10 g”. Teraz wprowadzamy wzór tego reagentu, a kalkulator będzie liczył i pokazywał jego masę molekularną w miarę wpisywania.
Klikamy LPM na komórkę tabeli z symbolem Ca. Napis w polu reagent1 zmienia się: “Pierwszy reagent Ca 40.078 dany 10 g”.
Klikamy LPM na komórkę tabeli z symbolem C. Napis w polu reagent1 zmienia się: “Pierwszy reagent CaC 52.089 dany 10 g”. To znaczy, że kalkulator dodał masy atomowe wapnia i węgla.
Klikamy LPM na pole tabeli z symbolem O. Tekst w polu reagent1 zmienia się: „Pierwszy reagent CaCO 68,088 podano 10 g”. Kalkulator dodał do sumy masę atomową tlenu.
Klikamy LPM na pole tabeli z symbolem O. Tekst w polu reagent1 zmienia się: „Pierwszy reagent CaCO2 84,087 podano 10 g”. Kalkulator ponownie dodał do sumy masę atomową tlenu.
Klikamy LPM na pole tabeli z symbolem O. Tekst w polu reagent1 zmienia się: „Pierwszy reagent CaCO3 100,086 podano 10 g”. Kalkulator znowu dodał do sumy masę atomową tlenu.
Klikamy Enter na klawiaturze komputera. Wprowadzenie pierwszego reagentu zostało zakończone i przechodzi do pola reagent2. Zauważmy, że w tym przykładzie przedstawiamy minimalną wersję. W razie potrzeby można łatwo zorganizować mnożniki atomów tego samego typu, aby np. nie klikać siedem razy z rzędu na komórkę tlenu przy wprowadzaniu wzoru chromianu (K2Cr2O7).
Klikamy LPM na pole tabeli z symbolem H. Tekst w polu reagent2 zmienia się: „Drugi reagent H 1,008 znaleźć x”.
Klikamy LPM na pole tabeli z symbolem Cl. Tekst w polu reagent2 zmienia się: „Drugi reagent HCl 36,458 znaleźć x”. Kalkulator zsumował masy atomowe wodoru i chloru. W przedstawionym powyżej równaniu reakcji przed kwasem solnym znajduje się współczynnik 2. Dlatego klikamy LPM na polu reagent2. Masa cząsteczkowa podwaja się (przy podwójnym kliknięciu potraja się itd.). Tekst w polu reagent2 zmienia się: „Drugi reagent 2HCl 72,916 znaleźć x”.
Klikamy Enter na klawiaturze komputera. Wprowadzenie drugiego reagentu zostało zakończone, a kalkulator znajduje x z proporcji

Co było do znalezienia.
Uwaga 1. Znaczenie uzyskanej proporcji: do rozpuszczenia 100,086 wapień potrzebuje 72,916 Da kwasu, a do rozpuszczenia 10 g wapnia potrzebuje x kwasu.
Uwaga 2. Zbiory podobnych zadań:
Chomczenko I. G., Zbiór zadań i ćwiczeń z chemii 2009 r (klasy 8-11).
Chomczenko G. P., Chomczenko I. G., Zbiór zadań z chemii dla kandydatów na studia, 2019.
Uwaga 3. Aby uprościć zadanie, można w pierwotnej wersji uprościć wprowadzanie wzoru i po prostu dopisać symbol pierwiastka na końcu linii wzoru. Wtedy wzór węglanu wapnia będzie miał postać:
CaCOOO
Jednak taki zapis raczej nie spodoba się nauczycielowi chemii. Poprawne zapisanie nie jest trudne — w tym celu trzeba dodać tablicę:
formula : array [1..size] of integer;gdzie indeks – numer pierwiastka chemicznego, a wartość według tego indeksu – liczba atomów (pierwotnie wszystkie elementy tablicy są zerowane). Należy uwzględnić kolejność zapisu atomów w formule, przyjętą w chemii. Na przykład O3CaC też mało komu się spodoba. Przekładamy odpowiedzialność na użytkownika. Tworzymy tablicę:
formulaOrder : array [1..size] of integer; // można wziąć krócejgdzie zapisujemy numer pierwiastka chemicznego według indeksu jego wystąpienia w formule. Dodanie atomu currNo do formuły:
if formula [currNo]=0 then // ten atom napotkany po raz pierwszy
begin
orderIndex := orderIndex+1; // na początku wprowadzania formuły orderIndex=0
formulaOrder [orderIndex] := currNo;
end;
formula [currNo]:=formula [currNo]+1;Zapis formuły w ciągu:
s := ''; // pusty ciąg dla formuły
for i:=1 to orderIndex do // dla wszystkich symboli chemicznych w formule
begin
s:=s+TableSymbols [ formulaOrder[i]]; // dodajemy symbol chemiczny
if formula [formulaOrder[i]]1 then // dodajemy liczbę atomów
s:=s+ intToStr(formula [formulaOrder[i]]);
end;
Uwaga 4. Ma sens zapewnić możliwość alternatywnego wprowadzania formuły reagenta z klawiatury. W takim przypadku należy zrealizować prosty analizator składni.
Warto zauważyć, że:
Dziś istnieje kilka setek wariantów tabeli, przy czym naukowcy proponują coraz nowsze warianty. ()
Uczniowie mogą wykazać się pomysłowością także w tym kierunku, realizując któryś z już zaproponowanych wariantów lub spróbować stworzyć swój oryginalny. Może się wydawać, że to najmniej przydatny dla lekcji informatyki kierunek. Jednak w zrealizowanej w tej artykule formie Tablicy Okresowej niektórzy uczniowie mogą nie dostrzegać szczególnych zalet kart zarządzających w porównaniu do alternatywnego rozwiązania za pomocą standardowych przycisków TButton. Spiralna forma tabeli (gdzie komórki mają różne kształty) wyraźniej zademonstruje zalety proponowanego tutaj rozwiązania.

(, )
Dodajmy także, że o pewnych istniejących w tej chwili programach komputerowych do Tablicy Mendelejewa opowiedziano w niedawno opublikowanej na Habra .
Dodatek 2: przykłady zadań do filtrówZa pomocą filtrów można rozwiązać na przykład takie zadania:
1) Wyodrębnić z tabeli wszystkie pierwiastki znane w średniowieczu.
2) Wyodrębnić wszystkie pierwiastki znane w momencie odkrycia Prawa Okresowego.
3) Wybierz siedem pierwiastków, które alchemicy uważali za metale.
4) Wybierz wszystkie pierwiastki, które w normalnych warunkach (n.w.) są w stanie gazowym.
5) Wybierz wszystkie pierwiastki, które w n.w. są w stanie ciekłym.
6) Wybierz wszystkie pierwiastki, które w n.w. są w stanie stałym.
7) Wybierz wszystkie pierwiastki, które mogą długi czas pozostawać w powietrzu bez zauważalnych zmian w n.w.
8) Wybierz wszystkie metale, które rozpuszczają się w kwasie solnym.
9) Wybierz wszystkie metale, które rozpuszczają się w kwasie siarkowym w n.w.
10) Wybierz wszystkie metale, które rozpuszczają się w kwasie siarkowym po podgrzaniu.
11) Wybierz wszystkie metale, które rozpuszczają się w kwasie azotowym.
12) Wybierz wszystkie metale, które intensywnie reagują z wodą w n.w.
13) Wybierz wszystkie metale.
14) Wybierz pierwiastki, które są powszechnie występujące w przyrodzie.
15) Wybierz pierwiastki, które występują w przyrodzie w stanie wolnym.
16) Wybierz pierwiastki, które odgrywają kluczową rolę w organizmach ludzi i zwierząt.
17) Wybierz pierwiastki, które są szeroko stosowane w życiu codziennym (w stanie wolnym lub w związkach).
18) Wybierz pierwiastki, z którymi praca jest najbardziej niebezpieczna i wymaga szczególnych środków ochrony.
19) Wybierz pierwiastki, które w stanie wolnym lub w postaci związków stanowią największe zagrożenie dla ekologii.
20) Wybierz metale szlachetne.
21) Wybierz pierwiastki, które są droższe od metali szlachetnych.
Uwagi
1) Ma sens zapewnienie działania kilku filtrów. Na przykład, jeśli włączyć filtr do rozwiązania zadania 1 (wszystkie pierwiastki znane w średniowieczu) i 20 (metale szlachetne), to będą zaznaczone (na przykład kolorem) komórki z metalami szlachetnymi znanymi w średniowieczu (nie zostanie zaznaczony na przykład pallad, odkryty w 1803 roku).
2) Warto zapewnić działanie kilku filtrów w taki sposób, aby każdy filtr wyróżniał komórki swoim kolorem, ale nie usuwał całkowicie wyróżnienia innego filtru (część komórki jednym kolorem, część innym). W takim przypadku w poprzednim przykładzie będą widoczne elementy przecięcia zbiorów otwartych w średniowieczu oraz metali szlachetnych, a także elementy należące tylko do pierwszego i tylko drugiego zbioru. Tzn. metale szlachetne, które były nieznane w średniowieczu, i elementy znane w średniowieczu, ale które nie są metalami szlachetnymi.
3) Warto po zastosowaniu filtru zapewnić możliwości innych prac z uzyskanymi wynikami. Na przykład, wyróżniając elementy znane w średniowieczu, użytkownik klika LPM na wyróżniony element i przechodzi do artykułu Wikipedii na temat tego elementu.
4) Warto zapewnić możliwość użytkownikowi usunięcia wyróżnienia poprzez kliknięcie LPM na wyróżnioną komórkę tabeli. Na przykład, aby usunąć już przeglądane elementy.
5) Warto zapewnić zapis listy wyróżnionych komórek w pliku i załadunek takiego pliku z automatycznym wyróżnieniem komórek. To da użytkownikowi możliwość zrobienia przerwy w pracy.
Użyliśmy statycznej z góry określonej mapy sterującej, jednak istnieje wiele ważnych zadań, w których mogą być używane dynamiczne mapy sterujące, zmieniające się w trakcie pracy programu. Przykładem może być edytor grafów, w którym użytkownik za pomocą myszy wskazuje w oknie położenie wierzchołków i rysuje krawędzie między nimi. Aby usunąć wierzchołek lub krawędź, użytkownik musi na niego wskazać. Ale jeśli wskazanie wierzchołka, oznaczonego okręgiem, jest wystarczająco proste, to wskazanie krawędzi, narysowanej cienką linią, będzie trudniejsze. Tutaj pomoże mapa sterująca, w której wierzchołki i krawędzie zajmują okolicę szerszą niż na widocznym rysunku.
Interesujące pytanie poboczne związane z poruszanym metodą kompleksowego uczenia się: czy ta metoda może być przydatna w nauczaniu AI?
Źródło: habr.com
