(Управляющие карты)
(Посвящается Международному году Периодической таблицы химических элементов)
(Последние дополнения сделаны 8 апреля 2019. Список дополнений сразу под катом)
(Цветок Менделеева, Источник)
В приведенной цитате Вениамин Каверин мастерски показал недостатки комплексного метода обучения, однако в некоторых (может быть, довольно редких) случаях элементы этого метода бывают оправданы. Один из таких случаев — это Периодическая таблица Д.И.Менделеева на уроках школьной информатики. Задача программной автоматизации типовых действий с таблицей Менделеева наглядна для школьников, начавших изучать химию, и разбивается на многие типовые химические задачи. В то же время в рамках информатики эта задача позволяет в простой форме продемонстрировать способ управляющих карт, который можно отнести к графическому программированию, понимаемому в широком смысле слова как программирование с помощью графических элементов.
(8 апреля 2019 сделаны дополнения:
Дополнение 1: как работает химический калькулятор
Дополнение 2: примеры задач для фильтров)
Начнем с базовой задачи. В простейшем случае на экране в форме-окне должна отображаться Периодическая таблица, где в каждой клетке будет химическое обозначение элемента: H — водород, He — гелий и т.д. Если курсор мыши указывает на клетку, то в специальном поле на нашей форме отображается обозначение элемента и его номер. Если пользователь при этом нажмет ЛКМ, то в другом поле формы будет указаны обозначение и номер этого выбранного элемента.
Задачу можно решать на любом универсальном ЯП. Мы возмем простой старый Delpi-7, понятный почти всем. Но прежде чем программировать на ЯП, нарисуем две картинки, например, в Фотошопе. Во-первых, нарисуем Периодическую таблицу в том виде, как мы хотим ее видеть в программе. Сохраним результат в графическом файле table01.bmp.
Для второго рисунка используем первый. Будем последовательно заливать очищенные от всякой графики клетки таблицы уникальными цветами в цветовой модели RGB. R и G всегда будут 0, а B=1 для водорода, 2 для гелия и т. д. Этот рисунок и будет нашей управляющей картой, которую мы сохраним в файл под именем table2.bmp.
Первый этап графического программирования в Фотошопе закончен. Перейдем к графическому программированию GUI в IDE Delpi-7. Для этого открываем новый проект, где на главную форму помещаем кнопку вызова диалога (tableDlg), в котором будет проходить работа с таблицей. Далее работаем с формой tableDlg.
Помещаем на форму компонент класса TImage. Получаем Image1. Отметим, что в общем случае для больших проектов автоматически сгенерированные имена вида ImageN, где N может достигать нескольких десятков и более — не лучший стиль программирования, и следует давать более осмысленные имена. Но в нашем маленьком проекте, где N не будет превосходить 2, можно оставить как сгенерировалось.
В свойство Image1.Picture загружаем файл table01.bmp. Создаем Image2 и загружаем туда нашу управляющую карту table2.bmp. При этом файл делаем маленьким и невидимым пользователю, как показано в левом нижнем углу формы. Добавляем дополнительные элементы контроля, назначения которых очевидно. Второй этап графического программирования GUI в IDE Delpi-7 закончен.
Переходим к третьему этапу — написанию кода в IDE Delpi-7. Модуль состоит всего из пяти обработчиков событий: создание формы (FormCreate), движения курсора по Image1 (Image1MouseMove), нажатие ЛКМ на клетку (Image1Click) и выхода из диалога с помощью кнопок OK (OKBtnClick) или Cancel (CancelBtnClick). Заголовки этих обработчиков генерируются стандартным образом с помощью IDE.
В нашей версии мы взяли таблицу размером 104 элемента (константа size). Очевидным образом этот размер может быть увеличен. Обозначения элементов (химические символы) записываются в массив TableSymbols. Однако по соображениям компактности исходного кода представляется целесообразным записать последовательность этих обозначений в виде строковых констант PeriodicTableStr1,…, PeriodicTableStr4, чтобы при событии создания формы программа сама раскидала эти обозначения по элементам массива. Каждое обозначение элемента состоит из одной или двух латинских букв, причем первая буква прописная, а вторая (если есть) строчная. Это несложное правило реализуется при загрузке массива. Таким образом, последовательность обозначений удается записать сжатым образом без пробелов. Разбивка последовательности на четыре части (константы PeriodicTableStr1,…, PeriodicTableStr4) обусловлена соображением удобства чтения исходного кода, т.к. слишком длинная строка может не уместиться целиком на экране.
При событии передвижения курсора мыши по Image1 обработчик Image1MouseMove этого события определяет значение синей компоненты цвета пиксела управляющей карты Image2 для текущих координат курсора. По построению Image2 это значение равно номеру элемента, если курсор находится внутри клетки; нулю, если на границе, и 255 в других случаях. Остальные действия, производимые программой, тривиальны и не требуют пояснений.
В дополнение к отмеченным выше стилистическим приемам программирования стоит отметить стиль комментариев. Строго говоря, рассмотренный код настолько маленький и простой, что комментарии выглядят не особо нужными. Однако они были добавлены в том числе и по методическим соображениям — короткий код позволяет сделать нагляднее некоторые общие выводы. В представленном коде декларирован один класс (TtableDlg). Методы этого класса можно поменять местами и это никак не отразится на функционировании программы, но может сказаться на ее удобочитаемости. Например, представим последовательность:
Может, и не очень заметно, но читать и разбираться станет чуточку сложнее. Если методов не пять, а в десятки раз больше и в секции implementation у них совершенно другой порядок следования, чем в описаниях классов, то хаос будет только возрастать. Поэтому, хотя строго доказать трудно и может быть даже невозможно, но можно надеяться, что наведение дополнительного порядка улучшит читаемость кода. Этому дополнительному порядку способствует логическая группировка нескольких методов, выполняющих близкие задачи. Каждой группе стоит дать заголовок, например:
Эти заголовки стоит скопировать в начало модуля и оформить как оглавление. В некоторых случаях достаточно длинных модулей такие оглавления предоставляют дополнительные возможности навигации. Аналогично в длинном теле одного метода, процедуры или функции стоит, во-первых, отметить конец этого тела:
а, во-вторых, в развлетвленных операторах с программными скобками begin – end отметить оператор, к которому относится закрывающая скобка:
Для выделения заголовков групп и концов тел методов можно добавить строки, превышающие длину большинства операторов и состоящие, например, из символов «=» и «_» соответственно.
Опять же нужно оговориться: у нас слишком простой пример. А когда код метода не помещается на один экран, в шести следующих друг за другом end разобраться, чтобы произвести изменения кода, бывает непросто. В некоторых старых компиляторах, например, Pascal 8000 для OS IBM 360/370 в листинге cлева печаталась служебная колонка вида
Это означало, что закрывающая программная скобка на строке E5 соответствует открывающей скобке на строке B5.
Конечно, стиль программирования очень неоднозначный вопрос, поэтому высказанные здесь идеи следует воспринимать не более чем информацию к размышлению. Двум достаточно опытным программистам, у которых за многие годы работы сложились и стали привычными разные стили, бывает очень трудно договориться. Другое дело учащийся программировать школьник, у которого еще не было времени обрести свой собственный стиль. Думаю, что в этом случае учитель должен по меньшей мере донести до своих учеников такую простую, но неочевидную им мысль, что успех программы во многом зависит от стиля, на котором написан ее исходный код. Ученик может не последовать рекомендуемому стилю, но пусть он хотя бы задумается о необходимости «лишних» действий для улучшения оформления исходного кода.
Возвращаясь к нашей базовой задаче по Периодической таблице: дальнейшее развитие может идти в разных направлениях. Одно из направлений справочное: при наведении курсора мыши на клетку таблицы выпадает информ-окно, содержащее дополнительные сведения по указанному элементу. Дальнейшее развитие — фильтры. Например, в зависимости от установки в информ-окне будет только: важнейшие физ-хим сведения, информация по истории открытия, информация о распространении в природе, список важнейших соединений (куда входит данный элемент), физиологические свойства, название на иностранном языке и т. д. Вспоминая «утку» Каверина, с которой начинается эта статья, можно сказать, что при таком развитии программы получим полный обучающий комплекс по естественным наукам: кроме информатики, физики и химии — биология, экономическая география, история науки и даже иностранные языки.
Но локальная база данных — это не предел. Программа естественным образом подключается к Интернету. При выборе элемента срабатывает ссылка, и в окне web-браузера раскрывается статья Википедии про данный элемент. Википедия, как известно, не является авторитетным источником. Можно задать ссылки на авторитетные источники, например, химическую энциклопедию, БСЭ, реферативные журналы, заказать запросы в поисковиках на данный элемент и т.д. Т.о. ученики смогут выполнять простые, но содержательные задания по темам СУБД и Интернет.
Кроме запросов по отдельному элементу, можно сделать функционал, который будет отмечать, например, разными цветами клетки в таблице, соответствующие определенным критериям. Например, металлы и неметаллы. Или клетки, которые сливает в водоемы местный химзавод.
Можно также реализовать функции записной книжки-органайзера. Например, выделить в таблице элементы, которые входят в экзамен. Потом выделять элементы, изученные/повторенные учеником при подготовке к экзамену.
А вот, например, одна из типовых задач школьной химии:
Дано 10 г мела. Сколько соляной кислоты надо взять, чтобы растворить весь этот мел?
Чтобы решить эту задачу, надо, записав хим. реакцию и расставив в ней коэффициенты, посчитать молекулярные веса карбоната кальция и хлористого водорода, потом составить и решить пропорцию. Посчитать и решить сможет калькулятор на основе нашей базовой программы. Правда, еще нужно будет учесть, что кислоту надо взять с разумным избытком и в разумной концентрации, но это уже химия, а не информатика.
Стоит отметить, что:
Ученики могут проявить смекалку и в этом направлении, реализуя какой-нибудь из уже предложенных вариантов или попробовать сделать свой оригинальный. Может показаться, что это наименее полезное для уроков информатики направление. Однако в реализованной в этой статье форме Периодической таблицы некоторые ученики могут не разглядеть особых преимуществ управляющих карт перед альтернативным решением с помощью стандартных кнопок TButton. Спиральная форма таблицы (где клетки разной формы) нагляднее продемонстрирует преимущества предлагаемого здесь решения.
(Альтернативная система элементов Теодора Бенфея, Источник)
Добавим также, что о ряде существующих на данный момент компьютерных программ для Таблицы Менделеева рассказано в недавно опубликованной на Хабре статье.
Мы использовали статичную наперед заданную управляющую карту, однако есть много важных задач, где могут использоваться динамические управляющие карты, изменяющиеся в ходе работы программы. Примером может быть редактор графов, в котором пользователь с помощью мыши указывает в окне положения вершин и рисует ребра между ними. Чтобы удалить вершину или ребро, пользователь должен указать на нее. Но если на вершину, обозначенную кружком, указать достаточно просто, то на ребро, прорисованное тонкой линией, указать будет сложнее. Здесь поможет управляющая карта, где вершины и ребра занимают окрестности более широкие, чем на видимом рисунке.
С затронутым методом комплексного обучения связан интересный побочный вопрос: может ли данный метод быть полезен при обучении ИИ?
(Посвящается Международному году Периодической таблицы химических элементов)
(Последние дополнения сделаны 8 апреля 2019. Список дополнений сразу под катом)
(Цветок Менделеева, Источник)
Помнится, мы проходили утку. Это были сразу три урока: география, естествознание и русский. На уроке естествознания утка изучалась как утка какие у нее крылышки, какие лапки, как она плавает и так далее. На уроке географии та же утка изучалась как житель земного шара: нужно было на карте показать, где она живет и где ее нет. На русском Серафима Петровна учила нас писать «у-т-к-а» и читала что-нибудь об утках из Брема. Мимоходом она сообщала нам, что по-немецки утка так-то, а по-французски так-то. Кажется, это называлось тогда «комплексным методом». В общем, все выходило «мимоходом».
Вениамин Каверин, Два капитана
В приведенной цитате Вениамин Каверин мастерски показал недостатки комплексного метода обучения, однако в некоторых (может быть, довольно редких) случаях элементы этого метода бывают оправданы. Один из таких случаев — это Периодическая таблица Д.И.Менделеева на уроках школьной информатики. Задача программной автоматизации типовых действий с таблицей Менделеева наглядна для школьников, начавших изучать химию, и разбивается на многие типовые химические задачи. В то же время в рамках информатики эта задача позволяет в простой форме продемонстрировать способ управляющих карт, который можно отнести к графическому программированию, понимаемому в широком смысле слова как программирование с помощью графических элементов.
(8 апреля 2019 сделаны дополнения:
Дополнение 1: как работает химический калькулятор
Дополнение 2: примеры задач для фильтров)
Начнем с базовой задачи. В простейшем случае на экране в форме-окне должна отображаться Периодическая таблица, где в каждой клетке будет химическое обозначение элемента: H — водород, He — гелий и т.д. Если курсор мыши указывает на клетку, то в специальном поле на нашей форме отображается обозначение элемента и его номер. Если пользователь при этом нажмет ЛКМ, то в другом поле формы будет указаны обозначение и номер этого выбранного элемента.
Задачу можно решать на любом универсальном ЯП. Мы возмем простой старый Delpi-7, понятный почти всем. Но прежде чем программировать на ЯП, нарисуем две картинки, например, в Фотошопе. Во-первых, нарисуем Периодическую таблицу в том виде, как мы хотим ее видеть в программе. Сохраним результат в графическом файле table01.bmp.
Для второго рисунка используем первый. Будем последовательно заливать очищенные от всякой графики клетки таблицы уникальными цветами в цветовой модели RGB. R и G всегда будут 0, а B=1 для водорода, 2 для гелия и т. д. Этот рисунок и будет нашей управляющей картой, которую мы сохраним в файл под именем table2.bmp.
Первый этап графического программирования в Фотошопе закончен. Перейдем к графическому программированию GUI в IDE Delpi-7. Для этого открываем новый проект, где на главную форму помещаем кнопку вызова диалога (tableDlg), в котором будет проходить работа с таблицей. Далее работаем с формой tableDlg.
Помещаем на форму компонент класса TImage. Получаем Image1. Отметим, что в общем случае для больших проектов автоматически сгенерированные имена вида ImageN, где N может достигать нескольких десятков и более — не лучший стиль программирования, и следует давать более осмысленные имена. Но в нашем маленьком проекте, где N не будет превосходить 2, можно оставить как сгенерировалось.
В свойство Image1.Picture загружаем файл table01.bmp. Создаем Image2 и загружаем туда нашу управляющую карту table2.bmp. При этом файл делаем маленьким и невидимым пользователю, как показано в левом нижнем углу формы. Добавляем дополнительные элементы контроля, назначения которых очевидно. Второй этап графического программирования GUI в IDE Delpi-7 закончен.
Переходим к третьему этапу — написанию кода в IDE Delpi-7. Модуль состоит всего из пяти обработчиков событий: создание формы (FormCreate), движения курсора по Image1 (Image1MouseMove), нажатие ЛКМ на клетку (Image1Click) и выхода из диалога с помощью кнопок OK (OKBtnClick) или Cancel (CancelBtnClick). Заголовки этих обработчиков генерируются стандартным образом с помощью IDE.
Исходный код модуля:
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 элемента (константа size). Очевидным образом этот размер может быть увеличен. Обозначения элементов (химические символы) записываются в массив TableSymbols. Однако по соображениям компактности исходного кода представляется целесообразным записать последовательность этих обозначений в виде строковых констант PeriodicTableStr1,…, PeriodicTableStr4, чтобы при событии создания формы программа сама раскидала эти обозначения по элементам массива. Каждое обозначение элемента состоит из одной или двух латинских букв, причем первая буква прописная, а вторая (если есть) строчная. Это несложное правило реализуется при загрузке массива. Таким образом, последовательность обозначений удается записать сжатым образом без пробелов. Разбивка последовательности на четыре части (константы PeriodicTableStr1,…, PeriodicTableStr4) обусловлена соображением удобства чтения исходного кода, т.к. слишком длинная строка может не уместиться целиком на экране.
При событии передвижения курсора мыши по Image1 обработчик Image1MouseMove этого события определяет значение синей компоненты цвета пиксела управляющей карты Image2 для текущих координат курсора. По построению Image2 это значение равно номеру элемента, если курсор находится внутри клетки; нулю, если на границе, и 255 в других случаях. Остальные действия, производимые программой, тривиальны и не требуют пояснений.
В дополнение к отмеченным выше стилистическим приемам программирования стоит отметить стиль комментариев. Строго говоря, рассмотренный код настолько маленький и простой, что комментарии выглядят не особо нужными. Однако они были добавлены в том числе и по методическим соображениям — короткий код позволяет сделать нагляднее некоторые общие выводы. В представленном коде декларирован один класс (TtableDlg). Методы этого класса можно поменять местами и это никак не отразится на функционировании программы, но может сказаться на ее удобочитаемости. Например, представим последовательность:
OKBtnClick, Image1MouseMove, FormCreate, Image1Click, CancelBtnClick.
Может, и не очень заметно, но читать и разбираться станет чуточку сложнее. Если методов не пять, а в десятки раз больше и в секции implementation у них совершенно другой порядок следования, чем в описаниях классов, то хаос будет только возрастать. Поэтому, хотя строго доказать трудно и может быть даже невозможно, но можно надеяться, что наведение дополнительного порядка улучшит читаемость кода. Этому дополнительному порядку способствует логическая группировка нескольких методов, выполняющих близкие задачи. Каждой группе стоит дать заголовок, например:
// работа с таблицей: указание и выбор
Эти заголовки стоит скопировать в начало модуля и оформить как оглавление. В некоторых случаях достаточно длинных модулей такие оглавления предоставляют дополнительные возможности навигации. Аналогично в длинном теле одного метода, процедуры или функции стоит, во-первых, отметить конец этого тела:
end; // FormCreate
а, во-вторых, в развлетвленных операторах с программными скобками begin – end отметить оператор, к которому относится закрывающая скобка:
end; // if s [j] in
end; // for i :=1
end; // FormCreate
Для выделения заголовков групп и концов тел методов можно добавить строки, превышающие длину большинства операторов и состоящие, например, из символов «=» и «_» соответственно.
Опять же нужно оговориться: у нас слишком простой пример. А когда код метода не помещается на один экран, в шести следующих друг за другом end разобраться, чтобы произвести изменения кода, бывает непросто. В некоторых старых компиляторах, например, Pascal 8000 для OS IBM 360/370 в листинге cлева печаталась служебная колонка вида
B5
…
E5
Это означало, что закрывающая программная скобка на строке E5 соответствует открывающей скобке на строке B5.
Конечно, стиль программирования очень неоднозначный вопрос, поэтому высказанные здесь идеи следует воспринимать не более чем информацию к размышлению. Двум достаточно опытным программистам, у которых за многие годы работы сложились и стали привычными разные стили, бывает очень трудно договориться. Другое дело учащийся программировать школьник, у которого еще не было времени обрести свой собственный стиль. Думаю, что в этом случае учитель должен по меньшей мере донести до своих учеников такую простую, но неочевидную им мысль, что успех программы во многом зависит от стиля, на котором написан ее исходный код. Ученик может не последовать рекомендуемому стилю, но пусть он хотя бы задумается о необходимости «лишних» действий для улучшения оформления исходного кода.
Возвращаясь к нашей базовой задаче по Периодической таблице: дальнейшее развитие может идти в разных направлениях. Одно из направлений справочное: при наведении курсора мыши на клетку таблицы выпадает информ-окно, содержащее дополнительные сведения по указанному элементу. Дальнейшее развитие — фильтры. Например, в зависимости от установки в информ-окне будет только: важнейшие физ-хим сведения, информация по истории открытия, информация о распространении в природе, список важнейших соединений (куда входит данный элемент), физиологические свойства, название на иностранном языке и т. д. Вспоминая «утку» Каверина, с которой начинается эта статья, можно сказать, что при таком развитии программы получим полный обучающий комплекс по естественным наукам: кроме информатики, физики и химии — биология, экономическая география, история науки и даже иностранные языки.
Но локальная база данных — это не предел. Программа естественным образом подключается к Интернету. При выборе элемента срабатывает ссылка, и в окне web-браузера раскрывается статья Википедии про данный элемент. Википедия, как известно, не является авторитетным источником. Можно задать ссылки на авторитетные источники, например, химическую энциклопедию, БСЭ, реферативные журналы, заказать запросы в поисковиках на данный элемент и т.д. Т.о. ученики смогут выполнять простые, но содержательные задания по темам СУБД и Интернет.
Кроме запросов по отдельному элементу, можно сделать функционал, который будет отмечать, например, разными цветами клетки в таблице, соответствующие определенным критериям. Например, металлы и неметаллы. Или клетки, которые сливает в водоемы местный химзавод.
Можно также реализовать функции записной книжки-органайзера. Например, выделить в таблице элементы, которые входят в экзамен. Потом выделять элементы, изученные/повторенные учеником при подготовке к экзамену.
А вот, например, одна из типовых задач школьной химии:
Дано 10 г мела. Сколько соляной кислоты надо взять, чтобы растворить весь этот мел?
Чтобы решить эту задачу, надо, записав хим. реакцию и расставив в ней коэффициенты, посчитать молекулярные веса карбоната кальция и хлористого водорода, потом составить и решить пропорцию. Посчитать и решить сможет калькулятор на основе нашей базовой программы. Правда, еще нужно будет учесть, что кислоту надо взять с разумным избытком и в разумной концентрации, но это уже химия, а не информатика.
Дополнение 1: как работает химический калькулятор
Разберем работу калькулятора на примере приведенной выше задачи мела и “солянки”. Начнем с реакции:
CaCO3 + 2HCl = CaCl2 + H2O
Отсюда видим, что нам будут нужны атомные веса следующих элементов: кальция (Ca), углерода (С), кислорода (O), водорода (H) и хлора (Cl). В простейшем случае можем записать эти веса в одномерный массив, определенный как
где индекс массива соответствует номеру элемента. Еще на свободное место формы tableDlg помещаем два поля. В первом поле первоначально написано: “Первый реагент дано”, во втором — “Второй реагент найти х”. Обозначим поля reagent1, reagent2 соответственно. Другие дополнения в программу будут ясны из следующего примера работы калькулятора.
Набираем на клавиатуре компьютера: 10 г. Надпись в поле reagent1 меняется: “Первый реагент дано 10 г”. Теперь вводим формулу этого реагента, а калькулятор будет считать и показывать его молекулярный вес по мере ввода.
Нажимаем ЛКМ на клетку таблицы с символом Ca. Надпись в поле reagent1 меняется: “Первый реагент Ca 40.078 дано 10 г”.
Нажимаем ЛКМ на клетку таблицы с символом C. Надпись в поле reagent1 меняется: “Первый реагент CaC 52.089 дано 10 г”. Т.е. калькулятор сложил атомные веса кальция и углерода.
Нажимаем ЛКМ на клетку таблицы с символом O. Надпись в поле reagent1 меняется: “Первый реагент CaCO 68.088 дано 10 г”. Калькулятор добавил к сумме атомный вес кислорода.
Нажимаем ЛКМ на клетку таблицы с символом O. Надпись в поле reagent1 меняется: “Первый реагент CaCO2 84.087 дано 10 г”. Калькулятор еще раз добавил к сумме атомный вес кислорода.
Нажимаем ЛКМ на клетку таблицы с символом O. Надпись в поле reagent1 меняется: “Первый реагент CaCO3 100.086 дано 10 г”. Калькулятор снова добавил к сумме атомный вес кислорода.
Нажимаем Enter на клавиатуре компьютера. Ввод первого реагента закончен и переключается на поле reagent2. Отметим, что в этом примере мы приводим минимальную версию. При желании можно легко организовать множители атомов одного типа, чтобы, например, не нажимать по семь раз подряд на клетку кислорода при вводе формулы хромпика (K2Cr2O7).
Нажимаем ЛКМ на клетку таблицы с символом H. Надпись в поле reagent2 меняется: “Второй реагент H 1.008 найти х”.
Нажимаем ЛКМ на клетку таблицы с символом Cl. Надпись в поле reagent2 меняется: “Второй реагент HCl 36.458 найти х”. Калькулятор сложил атомные веса водорода и хлора. В приведенном выше уравнении реакции перед хлористым водородом стоит коэффициент 2. Поэтому нажимаем ЛКМ на поле reagent2. Молекулярный вес удваивается (при двойном нажатии утраивается и т.д.). Надпись в поле reagent2 меняется: “Второй реагент 2HCl 72.916 найти х”.
Нажимаем Enter на клавиатуре компьютера. Ввод второго реагента закончен, и калькулятор находит x из пропорции
Что и требовалось найти.
Примечание 1. Смысл полученной пропорции: для растворения 100.086 Da мела нужно 72.916 Da кислоты, а для растворения 10 г мела нужно х кислоты.
Примечание 2. Сборники похожих задач:
Хомченко И. Г., Сборник задач и упражнений по химии 2009 г (8-11 класс).
Хомченко Г. П., Хомченко И. Г., Сборник задач по химии для поступающих в вузы, 2019.
Примечание 3. Для упрощения задачи можно в начальной версии упростить ввод формулы и просто дописывать символ элемента в конец строки формулы. Тогда формула карбоната кальция будет иметь вид:
CaCOOO
Но такая запись вряд ли понравится учителю химии. Правильную запись сделать нетрудно — для этого нужно добавить массив:
где индекс – номер химического элемента, а значение по этому индексу – количество атомов (первоначально все элементы массива обнуляются). Следует учитывать порядок записи атомов в формуле, принятый в химии. Например, O3CaC тоже мало кому понравится. Переложим ответственность на пользователя. Делаем массив:
куда записываем номер химического элемента по индексу появления его в формуле. Добавление атома currNo в формулу:
Запись формулы в строку:
Примечание 4. Имеет смысл обеспечить возможность альтернативного ввода формулы реагента с клавиатуры. В этом случае нужно будет реализовать простой синтаксический анализатор.
CaCO3 + 2HCl = CaCl2 + H2O
Отсюда видим, что нам будут нужны атомные веса следующих элементов: кальция (Ca), углерода (С), кислорода (O), водорода (H) и хлора (Cl). В простейшем случае можем записать эти веса в одномерный массив, определенный как
AtomicMass : array [1..size] of real;
где индекс массива соответствует номеру элемента. Еще на свободное место формы tableDlg помещаем два поля. В первом поле первоначально написано: “Первый реагент дано”, во втором — “Второй реагент найти х”. Обозначим поля reagent1, reagent2 соответственно. Другие дополнения в программу будут ясны из следующего примера работы калькулятора.
Набираем на клавиатуре компьютера: 10 г. Надпись в поле reagent1 меняется: “Первый реагент дано 10 г”. Теперь вводим формулу этого реагента, а калькулятор будет считать и показывать его молекулярный вес по мере ввода.
Нажимаем ЛКМ на клетку таблицы с символом Ca. Надпись в поле reagent1 меняется: “Первый реагент Ca 40.078 дано 10 г”.
Нажимаем ЛКМ на клетку таблицы с символом C. Надпись в поле reagent1 меняется: “Первый реагент CaC 52.089 дано 10 г”. Т.е. калькулятор сложил атомные веса кальция и углерода.
Нажимаем ЛКМ на клетку таблицы с символом O. Надпись в поле reagent1 меняется: “Первый реагент CaCO 68.088 дано 10 г”. Калькулятор добавил к сумме атомный вес кислорода.
Нажимаем ЛКМ на клетку таблицы с символом O. Надпись в поле reagent1 меняется: “Первый реагент CaCO2 84.087 дано 10 г”. Калькулятор еще раз добавил к сумме атомный вес кислорода.
Нажимаем ЛКМ на клетку таблицы с символом O. Надпись в поле reagent1 меняется: “Первый реагент CaCO3 100.086 дано 10 г”. Калькулятор снова добавил к сумме атомный вес кислорода.
Нажимаем Enter на клавиатуре компьютера. Ввод первого реагента закончен и переключается на поле reagent2. Отметим, что в этом примере мы приводим минимальную версию. При желании можно легко организовать множители атомов одного типа, чтобы, например, не нажимать по семь раз подряд на клетку кислорода при вводе формулы хромпика (K2Cr2O7).
Нажимаем ЛКМ на клетку таблицы с символом H. Надпись в поле reagent2 меняется: “Второй реагент H 1.008 найти х”.
Нажимаем ЛКМ на клетку таблицы с символом Cl. Надпись в поле reagent2 меняется: “Второй реагент HCl 36.458 найти х”. Калькулятор сложил атомные веса водорода и хлора. В приведенном выше уравнении реакции перед хлористым водородом стоит коэффициент 2. Поэтому нажимаем ЛКМ на поле reagent2. Молекулярный вес удваивается (при двойном нажатии утраивается и т.д.). Надпись в поле reagent2 меняется: “Второй реагент 2HCl 72.916 найти х”.
Нажимаем Enter на клавиатуре компьютера. Ввод второго реагента закончен, и калькулятор находит x из пропорции
Что и требовалось найти.
Примечание 1. Смысл полученной пропорции: для растворения 100.086 Da мела нужно 72.916 Da кислоты, а для растворения 10 г мела нужно х кислоты.
Примечание 2. Сборники похожих задач:
Хомченко И. Г., Сборник задач и упражнений по химии 2009 г (8-11 класс).
Хомченко Г. П., Хомченко И. Г., Сборник задач по химии для поступающих в вузы, 2019.
Примечание 3. Для упрощения задачи можно в начальной версии упростить ввод формулы и просто дописывать символ элемента в конец строки формулы. Тогда формула карбоната кальция будет иметь вид:
CaCOOO
Но такая запись вряд ли понравится учителю химии. Правильную запись сделать нетрудно — для этого нужно добавить массив:
formula : array [1..size] of integer;
где индекс – номер химического элемента, а значение по этому индексу – количество атомов (первоначально все элементы массива обнуляются). Следует учитывать порядок записи атомов в формуле, принятый в химии. Например, O3CaC тоже мало кому понравится. Переложим ответственность на пользователя. Делаем массив:
formulaOrder : array [1..size] of integer; // можно взять покороче
куда записываем номер химического элемента по индексу появления его в формуле. Добавление атома currNo в формулу:
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;
Примечание 4. Имеет смысл обеспечить возможность альтернативного ввода формулы реагента с клавиатуры. В этом случае нужно будет реализовать простой синтаксический анализатор.
Стоит отметить, что:
Сегодня существуют несколько сотен вариантов таблицы, при этом учёные предлагают всё новые варианты. (Википедия)
Ученики могут проявить смекалку и в этом направлении, реализуя какой-нибудь из уже предложенных вариантов или попробовать сделать свой оригинальный. Может показаться, что это наименее полезное для уроков информатики направление. Однако в реализованной в этой статье форме Периодической таблицы некоторые ученики могут не разглядеть особых преимуществ управляющих карт перед альтернативным решением с помощью стандартных кнопок TButton. Спиральная форма таблицы (где клетки разной формы) нагляднее продемонстрирует преимущества предлагаемого здесь решения.
(Альтернативная система элементов Теодора Бенфея, Источник)
Добавим также, что о ряде существующих на данный момент компьютерных программ для Таблицы Менделеева рассказано в недавно опубликованной на Хабре статье.
Дополнение 2: примеры задач для фильтров
С помощью фильтров можно решать, например, такие задачи:
1) Выделить в таблице все элементы, известные в средние века.
2) Выделить все элементы, известные к моменту открытия Периодического закона.
3) Выделить семь элементов, которые алхимики считали металлами.
4) Выделить все элементы, которые находятся в газообразном состоянии при нормальных условиях (н.у.).
5) Выделить все элементы, которые находятся в жидком состоянии при н.у.
6) Выделить все элементы, которые находятся в твердом состоянии при н.у.
7) Выделить все элементы, которые могут долгое время находиться на воздухе без заметных изменений при н.у.
8) Выделить все металлы, которые растворяются в соляной кислоте.
9) Выделить все металлы, которые растворяются в серной кислоте при н.у.
10) Выделить все металлы, которые растворяются в серной кислоте при нагревании.
11) Выделить все металлы, которые растворяются в азотной кислоте.
12) Выделить все металлы, которые бурно реагируют с водой при н.у.
13) Выделить все металлы.
14) Выделить элементы, широко распространенные в природе.
15) Выделить элементы, которые встречаются в природе в свободном состоянии.
16) Выделить элементы, играющие важнейшую роль в организме человека и животных.
17) Выделить элементы, которые широко используются в быту (в свободном виде или в соединениях).
18) Выделить элементы, работы с которыми наиболее опасны и требуют специальных мер и средств защиты.
19) Выделить элементы, которые в свободном виде или в виде соединений представляют наибольшую угрозу для экологии.
20) Выделить драгоценные металлы.
21) Выделить элементы, стоящие дороже драгоценных металлов.
Примечания
1) Имеет смысл обеспечить работу нескольких фильтров. Например, если включить фильтр на решение задачи 1(все элементы, известные в средние века) и 20 (драгоценные металлы), то будут выделены (например, цветом) клетки с драгоценными металлами, известными в средние века (не будет выделен, например, палладий, открытый в 1803 г.).
2) Имеет смысл обеспечить работу нескольких фильтров в таком режиме, чтобы каждый фильтр выделял клетки своим цветом, но не удалял полностью выделение другого фильтра (часть клетки одним цветом, часть другим). Тогда в случае предыдущего примера будут видны элементы пересечения множеств открытых в средние века и драгоценных металлов, а также элементы, принадлежащие только первому и только второму множествам. Т.е. драгоценные металлы, неизвестные в средние века, и элементы, известные в средние века, но не являющиеся драгоценными металлами.
3) Имеет смысл после применения фильтра обеспечить возможность других работ с полученными результатами. Например, выделив элементы, известные в средние века, пользователь нажимает ЛКМ на выделенный элемент и попадает в статью Википедии про этот элемент.
4) Имеет смысл обеспечить возможность пользователю снимать выделение нажатием ЛКМ на выделенную клетку таблицы. Например, чтобы убрать уже просмотренные элементы.
5) Имеет смысл обеспечить сохранение списка выделенных клеток в файле и загрузку такого файла с автоматическим выделением клеток. Это даст пользователю возможность сделать перерыв в работе.
1) Выделить в таблице все элементы, известные в средние века.
2) Выделить все элементы, известные к моменту открытия Периодического закона.
3) Выделить семь элементов, которые алхимики считали металлами.
4) Выделить все элементы, которые находятся в газообразном состоянии при нормальных условиях (н.у.).
5) Выделить все элементы, которые находятся в жидком состоянии при н.у.
6) Выделить все элементы, которые находятся в твердом состоянии при н.у.
7) Выделить все элементы, которые могут долгое время находиться на воздухе без заметных изменений при н.у.
8) Выделить все металлы, которые растворяются в соляной кислоте.
9) Выделить все металлы, которые растворяются в серной кислоте при н.у.
10) Выделить все металлы, которые растворяются в серной кислоте при нагревании.
11) Выделить все металлы, которые растворяются в азотной кислоте.
12) Выделить все металлы, которые бурно реагируют с водой при н.у.
13) Выделить все металлы.
14) Выделить элементы, широко распространенные в природе.
15) Выделить элементы, которые встречаются в природе в свободном состоянии.
16) Выделить элементы, играющие важнейшую роль в организме человека и животных.
17) Выделить элементы, которые широко используются в быту (в свободном виде или в соединениях).
18) Выделить элементы, работы с которыми наиболее опасны и требуют специальных мер и средств защиты.
19) Выделить элементы, которые в свободном виде или в виде соединений представляют наибольшую угрозу для экологии.
20) Выделить драгоценные металлы.
21) Выделить элементы, стоящие дороже драгоценных металлов.
Примечания
1) Имеет смысл обеспечить работу нескольких фильтров. Например, если включить фильтр на решение задачи 1(все элементы, известные в средние века) и 20 (драгоценные металлы), то будут выделены (например, цветом) клетки с драгоценными металлами, известными в средние века (не будет выделен, например, палладий, открытый в 1803 г.).
2) Имеет смысл обеспечить работу нескольких фильтров в таком режиме, чтобы каждый фильтр выделял клетки своим цветом, но не удалял полностью выделение другого фильтра (часть клетки одним цветом, часть другим). Тогда в случае предыдущего примера будут видны элементы пересечения множеств открытых в средние века и драгоценных металлов, а также элементы, принадлежащие только первому и только второму множествам. Т.е. драгоценные металлы, неизвестные в средние века, и элементы, известные в средние века, но не являющиеся драгоценными металлами.
3) Имеет смысл после применения фильтра обеспечить возможность других работ с полученными результатами. Например, выделив элементы, известные в средние века, пользователь нажимает ЛКМ на выделенный элемент и попадает в статью Википедии про этот элемент.
4) Имеет смысл обеспечить возможность пользователю снимать выделение нажатием ЛКМ на выделенную клетку таблицы. Например, чтобы убрать уже просмотренные элементы.
5) Имеет смысл обеспечить сохранение списка выделенных клеток в файле и загрузку такого файла с автоматическим выделением клеток. Это даст пользователю возможность сделать перерыв в работе.
Мы использовали статичную наперед заданную управляющую карту, однако есть много важных задач, где могут использоваться динамические управляющие карты, изменяющиеся в ходе работы программы. Примером может быть редактор графов, в котором пользователь с помощью мыши указывает в окне положения вершин и рисует ребра между ними. Чтобы удалить вершину или ребро, пользователь должен указать на нее. Но если на вершину, обозначенную кружком, указать достаточно просто, то на ребро, прорисованное тонкой линией, указать будет сложнее. Здесь поможет управляющая карта, где вершины и ребра занимают окрестности более широкие, чем на видимом рисунке.
С затронутым методом комплексного обучения связан интересный побочный вопрос: может ли данный метод быть полезен при обучении ИИ?
masai
А какие, собственно, недостатки он показал? У некоторых и в обычной системе так же «мимоходом» выходит.
Не хочу разводить холивар, просто любопытно, так ли эта система плоха. Она, если не ошибаюсь, в Финляндии применяется.
third112 Автор
DaneSoul
Когда я начал проходить Computer Science курсы на английском на Coursera и Udacity — это очень сильно прокачало и способность понимать английский на слух и понимание изучаемого материала.
KMiNT21
Они просто совмещают, условно говоря, «задом-наперед». :) Так никакой синергии не будет.
Другое дело, если в более сложные задачи выполнять используя не случайные кубики, а те, которые нужно закрепить. Т.е. дополнительно «прожечь» эти нужные нейронные связи.
И (намного более важное) делать это надо с современным пониманием принципов работы памяти. С подключением долговременной памяти, а не превращая запоминание в неэффективную зубрежку.
sibirier
Весь мир знает, что «алоха» — гавайское многозначное слово в значениях «привет», «пока», «всего доброго» и проч. При этом это единственное, что многие знают о гавайской культуре. Кто-то знает гавайский язык? Имеет систематические знания по основам этого языка? Думаю, мало кто. Это вредит? Приносит пользу? Однозначно сказать нельзя. Так же нельзя однозначно дать оценку тому, если человек этого не знает. Хотя иногда находятся люди «как это ты этого не знаешь? все знают — а ты нет! ну ты *оскорбление*...» И тут речь совсем не о Гавайях.
Полагаю, тут речь идёт о том, чтобы впихнуть в голову ребенку то, что положено «программой обучения» максимально эффективным способом для запоминания этого. Тут можно рассмотреть с нескольких сторон:
1. Такую систему стоит активно внедрять лишь в средней школе, когда у детей в начальной школе уже сформировались какие-то фундаментальные знания о мире и они могут из этих знаний (и доп. информации) делать правильные выводы. Дети очень любопытны, а впихивание в детей готовых систем знаний и связей между вещами это любопытство может изувечить. Рассказывая «об утках» с разных позиций, человек может заинтересоваться одной (или несколькими) из этих позиций, может заинтересоваться самим объектом и связями с другими вещами и действиями. А может и вовсе ничего не усвоить, поняв, что ему не интересны ни области знаний, изучающих эти подходы, ни сам объект, либо же лишь построить своё мнение о системе преподавания.
Но с этим тоже стоит аккуратно, не надо делать из мозгов детей помойку, в которую сливают всё подряд под предлогом «ему может что-то из этого понравиться».
2. Делать то же самое, но уже с маленьких лет. С начальной школы, но одним единственным отдельным предметом, на котором детям будут рассказывать о разных интересных вещах, которые дети сами будут просить им рассказать. Возьмем тех же уток. Кому-то может стать интересно «как они летают? почему они не падают? и почему мы не можем летать как они? почему их крылья не мокнут, когда они ныряют?». На такие вопросы можно получить действительно интересные ответы, которые подтолкнут детей изучать физику, химию, биологию. На обычных уроках в ответ можно услышать что-то вроде «почитай книги», «не мешай вести урок», «меньше знаешь — крепче спишь» и проч.
3. Рассказывать детям действительно много всякой интересной информации, но не такой, про которую дети попросили рассказать, а просто всё подряд. И на этих же занятиях учить детей из тонны мусорной информации извлекать что-то реально полезное и/или интересное. И вот эти занятия будут максимально полезными для детей в период неограниченного доступа к ютуб, гугл, порнхаб и соцсетям. Каждый день на людей выливаются тонны информации, большая часть которых — фейки. Пока о законе о запрете фейков слагают легенды, они будут продолжать создаваться. Даже если не фейки, то бесполезная информация. И такое надо уметь фильтровать. Нас лет 10 назад этому никто не учил, никто не мог предположить, что нам может это пригодиться. А самое страшное тут, что мы не знаем, что будет через 5-10 лет. Какие знания пригодятся детям тогда? До чего дойдет абсурд законов и дерьмовость информации? Будут ли места, на которых в принципе не будет рекламы (которая уже сегодня дошла до абсолютного идиотизма)?
(прошу заметить отсутствие какой-либо привязки к какой-то стране или какому-либо сообществу)
В эпоху неограниченной возможности что-то в интернете искать и публиковать, стало действительно сложно в интернете найти что-то конкретное, полезное и релевантное.
DaneSoul
Смотрите, вначале изучается «природоведение», где по-немного собрано и из географии, и из биологии, и из химии, и из физики. И это все там прекрасно взаимодополняет друг друга и создает целостную общую картину.
А уже на базе этой картины потом идет разделение и углубление отдельно по каждому курсу, с деталями и углубленно.
Вот в конце школьного обучения не хватает результирующего объединяющего курса, который бы закрепил связи между разными предметами в единую целостную картину мира, что-то типа «концепции современного естествознания» преподаваемого в ВУЗах.
GeMir
yarosroman
Да ладно то Photoshop. А на сам Delphi?
third112 Автор
А на Винды? ;)
da-nie
Честно говоря, я не понял, для чего нужна эта программа? Картинка с таблицей, как мне кажется, полностью её заменяет. Или я чего-то не понял? Может, программа будет выдавать историю открытия элемента, область применения и основные свойства?
third112 Автор
Да. Именно так. Что прикрутите к базе — то она и выдаст, еще калькулятор можно сделать для решения хим.задачек, где надо счиать молекулярный вес. См. статью со слов:
da-nie
Вот если бы это уже было бы сделано, тогда да. А так можно вообще программу не писать: «что захотите, то и напишете».
third112 Автор
Что сделано? Тут куча вариантов для школьников/студентов. Видели хабы под заголовком?:
Понимаете, чем задачник отличается от учебника? Много задачников назовете, где все задачи снабжены подробными решениями — ученику только остается списать решение в тетрадь?
Описана нетривиальная часть — тут надо знать, и «что захотите, то и напишете» не сработает. А движок СУБД прикрутить и наполнить БД из Вики историей открытия элемента или/и хим.свойствами, думаю, смогут и самые тупые школьники, если еще им помогут, надеюсь, не самые тупые преподы.
Аналогично см., нпр.: Уэзерелл Ч. Этюды для программистов, М.: Мир, 1982. — 288 с.
da-nie
В данном конкретном проекте наполнение есть? Нет.
Я правильно понял, что вы хотите сказать, что данная программа нетривиальна?
Не наполняйте базу данных из Википедии. Возьмите для этого книги Леенсона, Фиалкова, Венецкого и подобные.
third112 Автор
Нет и не нужно. Что это добавит в плане информатики? — Ничего. В статье сказано:
В разных школах могут быть разные ЯП. В каждом своя специфика. Учитель может выбрать. По БД много хороших учебников. Хотите чтобы я пересказал все эти учебнки в одной статье? ;)
Для среднего школьника и студента младших курсов, конечно, нетривиальна. Для опытного спеца думаю, что ничего принципиально нового, кроме м.б. постановки задачи — наверное, не все думали о программировании Периодической таблицы.
Википедия не с потолка берет инфу, а из авторитетных источников. М.б. из указанных Вами. Но я бы предложил начать с хим. энциклопедии, учебников Полинга, Реми, Некрасова. Но пусть решают учителя химии и информатики.
da-nie
(тяжкий вздох). В конце 90-х мы софтверные 3D движки писали в 10 классе. Сейчас 2019, а прогресса всё нет и нет.
В Википедии очень сухая выжимка, главное для которой — наличие источника. А качество источника по сути не важно. Учебник Полинга и прочие не берите — это такая же сухая выжимка. Такое читать совершенно не интересно и совсем не полезно.
third112 Автор
Хотите сказать, что нобелист Полинг написал учебник низкого качества? Уверен, что с этим не согласится подавляющее большинство профессиональных химиков мира.
А что полезно? Альтернативную химию? ;) Средневековые алхимические трактаты? ;)
da-nie
Вы, видимо, не обратили внимание: как я уже сказал, 20 лет назад школьники писали программы, которым вот это вот на делфи и в подмётки не годится. Через 20 лет вы представляете как нетривиальную программу вот эту вот таблицу, которая суть примитив для тех самых школьников двадцатилетней давности.
Хочу сказать, что учебник — это только учебник. Он будет как ваша утка в начале статьи. Иными словами, он скучен.
А полезно читать научно-популярные книжки. Они увлекают, они пробуждают интерес к явлениям и к их взаимосвязям. Никакой учебник Савельева не сравнится по эффективности воздействия на читателя с Перельмановскими книжками. Откройте Мезенинова «Занимательно о железе». Сравните написанное там со статьёй в Википедии про железо и поймёте, что упускается в Википедии.
akryukov
Вы, наверное, забыли уточнить что 3D движки писали некоторые школьники. Что при этом делали остальные — большой вопрос.
da-nie
Так и сейчас таблицы Менделеева на делфи точно так же пишут некоторые, а не все.
akryukov
Так ведь множества некоторых, которые пишут движок, и некоторых которые верстают таблицу Менделеева почти не пересекаются.
Я в целом согласен, что задача в исходной формулировке простая. Вот только вы так сказали, как будто все школьники поголовно сейчас пишут 3D движки и нарисовать таблицу никому не интересно и не полезно.
da-nie
Нет, я только лишь сравнил уровень этой «нетривиальной» программы с тем, что делалось раньше.
da-nie
Но вообще, причина моей критики просто в том, что я ожидал увидеть законченный проект.
А автор, как я понял, хотел дать далёким от IT людям (остальные могут и сами её написать) некую заготовку, наполнять которую придётся желающим. В этом смысле я только «За!». Поэтому я желаю автору дальнейших творческих успехов!
third112 Автор
akryukov
Базовая часть задачи тривиальна для любого, кто владеет HTML+CSS.
Задумка в целом любопытная, но с целевой аудиторией дополнений к задаче вы промахнулись.
Дополнение задачи "поставить СУБД, прикрутить БД к такой таблице" можно давать только крайне способным и инициативным. Я ещё не уверен, что БД вообще изучаются на школьной информатике. Это все таки дисциплина профессионального обучения. Третий курс СПО и ВУЗов.
Кстати СУБД в данном случае не нужна. У вас нет конкурентного, многопользовательского чтения и записи. Xml файл в данном случае достаточен. Если уж и рассказывать про СУБД, то объяснять применимость этого инструмента и его альтернативы. Иначе ученики будут любой гвоздь забивать
микроскопомпромышленным прессом.Не смогут. Если "не самые тупые преподы" будут помогать, то в итоге сделают задачу за учеников.
Преподаватель и не должен обширно помогать студентам, иначе толку от обучения не будет.
Много задачников по программированию в виде книг вы вообще видели? Я как то занимался поисками, нашел только Златопольского.
third112 Автор
Один классический задачник я уже назвал выше:
Уэзерелл Ч. Этюды для программистов, М.: Мир, 1982. — 288 с.
Вторым я бы назвал книги Кнута " Искусство программирования..." — там задачи от очень простых до очень сложных, что особо отмечает автор.
3-й Вирт, Алгоритмы+СД...
Из более новых я бы отметил Седжвик, Фундаметальные алгоритмы на С
Из наших: С. Окулов, Программирование в алгоритмах
Более старый, но полезный задачник: В.А.Дагане и др., 100 задач по программированию
Думаю, достаточно. То, что во многих случаях задачник совмещен с учебником, сути не меняет.
Уверен, что смогут. В Дельфи нужно положить компонент СУБД, нпр., Парадокс на форму, а дальше по учебнику — нпр., В.Фаронов, Программирование БД в Delphi-7. Элементарно. Другой вопрос нужно ли в школе давать SQL? М.б. и не нужно, если это не спец.школа. Но статья не только для школьников, но и для студентов вузов и их преподов. Там можно копнуть и глубже.
Я про компонент, который обеспечивает базовые элементарные функции по работе с БД в одном из стандартных форматов.
Не понял: как Вы предлагаете решить эту задачу в HTML? И как предлагаете дальнейшее развитие, нпр., сделать хим. калькулятор? -Тут ИМХО без JS не обойтись. Можно подробнее?
Соответственно не понял: где и с какой целевой аудиторией я промахнулся?
third112 Автор
PS BTW
В поставке Delphi есть примеры проектов с БД. Там использованы именно компоненты СУБД хотя эти проекты для однопользовательского использования. Видимо у Вас с Борландом разные взгляды на организацию БД.
akryukov
Формально "задачник" это сборник задач. Но следует еще помнить об их применимости в школах и других учебных заведениях.
Вы выбираете задачники для чего? Лично я искал такой, чтобы можно было дать задачи по основам прикладного программирования (противопоставляя олимпиадному и "занимательному").
В школе "Этюды для программистов" нужны только чтобы занять продвинутых учеников. В самой книге написано:
Вот скажите, вы честно читали и прорешивали задачи Кнута или рекомендуете потому что все остальные их рекомендуют? Там не прикладное программирование, а хардкорный CS, где нужно доказывать теоремы. Наверное в какой-нибудь спецшколе подойдет, но не всем. При этом методика совершенно не сочетается с вашей идеей "сделать хим-калькулятор".
Книга "Седжвик, Фундаметальные алгоритмы на С" это все таки учебник. Причем не школьный. В первой же главе идут задачи на графы. Они безусловно полезны, но не в школе для обычных детей, а для подготовки олимпиадников в ВУЗах.
"С. Окулов, Программирование в алгоритмах" тоже не для простых смертных.
"В.А.Дагане и др., 100 задач по программированию" найти не удалось. Пришлите ссылку личным сообщением, пожалуйста.
akryukov
В книге "В.А.Дагене, Г.К.Григас, К.Ф.Аугутис, 100 задач по программированию" задачи скорее занимательные. Подойдет чтобы занять продвинутых учеников. Но им все равно нужно предварительно дать базовые задачки на простые вещи, а сборников в виде книги с такими задачами почти нет. Впрочем сейчас есть куча онлайн-площадок с автоматическим тестированием и они работают достаточно хорошо.
third112 Автор
А чем плохие «занимательные задачи»? Жизнь — занимательная? Сортировка пузырьком — занимательная? А Ханойские башни? Треугольник Паскаля и числа Фибоначчи? Слышал такое мнение, что некоторые задачи настолько знамениты, что их стыдно не знать.
akryukov
Занимательные задачи не плохи. Речь была именно про задачник.
Сравните, например, с задачником по алгебре за 9 класс.
Алгебра. 9 класс. В 2 ч. Ч. 2. Задачник для учащихся общеобразовательных учреждений / [А. Г. Мордкович, Л. А. Александрова, Т. Н. Мишустина и др.]; под ред. А. Г. Мордковича.
200 с чем то страниц и на каждой пара десятков заданий. Крайне трудно прорешать весь задачник и не усвоить в итоге тему.
Вы же предлагаете использовать задачки для развлечения в том случае, когда нужны задачки для оттачивания навыка.
third112 Автор
Ее почему-то помнят. А кто набивает руку на серых примерах по тождественному преобразованию выражений, через год после окончания школы не вспомнит формулу синуса двойного угла.
ИМХО одна из лучших книг по методологии математики (и по методике преподавания) это Лакатос И. Доказательства и опровержения. Как доказываются теоремы.
Еще раз: не понимаю слово «развлечение» в таком контексте. Для серьезного хорошо обученного спеца, увлеченного своей работой, эта работа одно из самых больших развлечений. При этом почему-то это развлечение бывает очень продуктивно.
third112 Автор
PS Приведу контрпример к указанному Вами задачнику — М. И. Сканави,
Сборник задач по математике для поступающих во втузы. Там на каждую тему задачи 3 уровней сложности: набил руку на одном уровне — переходи на следующий. Не скучно. Я бы сказал: развлекательно :)
akryukov
Посмотрите какая у него плотность задач на страницу. Вы видели что-нибудь подобное по программированию?
third112 Автор
Ох, видел методички некоторых солидных вузов Москвы — задачи типа: на ЕС ЭВМ решить СЛУ методом Гаусса — Зейделя. Думаете надо написать программу для этого метода? — Нет, использовать библиотечную функцию. Для зачета сдать распечатку, где в строчку перичислены корни. Даже не надо убеждаться, что система имеет единственное решение. Плотность на странице была выше, т.к. были перечислены варианты с разными коэффициентами — каждый студент из группы получал свой вариант. И какой смысл в таких заданиях? Профанация.
third112 Автор
PS См. Дополнение 2: примеры задач для фильтров там плотность выше ;)
akryukov
Вот видите. Даже в школе применимость задач может быть разная. Для обычной школы подойдет одно. Для профильной — другое.
Ваша задача про таблицу менделеева для какой школы задумана: профильной или обычной?
У вас есть репрезентативная выборка, подтверждающая этот тезис?
Почему вы думаете, что те, кто решает "интересные" задачки, не забывают эту формулу?
Решение занимательных задач, что по математике, что по программированию — это развлечение. На нем не построить программу обучения большого количества людей с нуля. Ни один из "задачников", которые вы приводили не подходит для обучения с нуля. Они в целом не всем по силам.
third112 Автор
Основная разница в учениках и в учителях. Невозможно собрать класс, где все будут одинаково успевающими — всегда кто-то будет отставать, а кто-то опережать. Если в обычной школе ученик сильно опережает остальных, то ему надо идти в профильную — опережение будет меньше, если будет. И в профильных учителя бывают лучше и меньше загружены: не приходится тратить силы на совсем тупых лентяев.
Как сказал выше:
Поэтому ИМХО задача про таблицу Менделеева подойдет любой школе. Тем более есть много вариантов развития этой задачи. М.б. в профильной выберут более сложный вариант.
У меня много знакомых вузовских преподов — все они хором плачут, что регулярно попадаются студенты, которые по диаметру не знают как сосчитать длину окружности. Какие уж тут синусы!
Элементарная психология: неинтересное быстрее забывается. ИМХО школьная математика методически очень плохо устроена и не надо брать с нее пример. Давным давно там (в школьной математике) выбрали самый простой путь: бесконечное сражение с монстрами. Когда у школьников не было калькуляторов и считали на бумажке, в арифметике 5 класса давали примеры в 10 действий, где надо было делить восьмизначное число на пятизначное.
Грогно всем по силам. Мои коллеги химики, которые никогда не программировали, самостоятельно научились по этому учебнику делать программы для своих проф. нужд.
akryukov
Почему вы думаете, что при решении интересной задачи человеку вдруг станет интересна формула минуса двойного угла? Он ее скорее всего запомнит на время решения, а потом формула вытеснится другой информацией.
На мой взгляд, школьная математика устроена как есть потому что цель — обучить максимум людей уверенным основам. Ваш подход с занимательными задачами не масштабируется. Попробуйте прийти в обычную школу, чтобы оценить уровень.
Гродно не задачник, а учебник. Если человеку для обучения достаточно учебника, то ему задачник не особо нужен. Но когда нужен обширный материал для отработки навыка, учебник не может помочь — быстро заканчивается.
third112 Автор
Обучить, но не напугать многоэтажными монстрами выражений, которые нужно зачем-то упростить. Прежде всего: в школе нет и не может быть цели сделать всех школьников математиками или программистами. А цель за 10 или 11 лет обеспечить всех учеников элементарными знаниями, которые обеспечат осознанный выбор профессии. И выбор не только в пользу вуза. Многие осознанно не идут в вуз и правильно делают, не потому что глупые, а потому что слепо не бегут за модой.
Возвращаясь к математике — понятно, что очень многим школьникам опыт борьбы с алгебраическими монстрами всю дальнейшую жизнь будет совершенно не нужен. И на выбор профессии этот опыт может влиять только негативно. Если школьник испуган школьной математикой он может не пойти, нпр., на геологический факультет только потому, что там опять будет ненавистная ему математика. Знаю такой пример: человек в средней школе начал на летние каникулы ездить в геологические экспедиции (родители геологи), но кончив школу на геологию не пошел из-за математики. Напугали в школе. Если же школьник преуспел в боях со школьными мат.монстрами, набил руку и выработал шаблоны решений подобных задачек, т.е. для него это стало рутиной, то он может решить стать математиком. Но поступив на математический — он с первых дней с удивлением обнаружит, что от него ждут совсем не умения упрощать выражения, а его отточенные за многие годы навыки это только техника, которая по большому счету никому не интересна. Если не сумеет быстро перестроиться и будет жаловаться преподам — те посоветуют ему пройти трехмесячные бухгалтерские курсы и идти работать, а в настояшую нешкольную математику не лезть.
В СССР было принято гордиться методикой преподавания математики в школе. Но, нпр., в школе не давали производную. А начальные знания по этой теме очень бы помогли пониманию школьной физики. Можно ведь было немного времени отрезать от побивания монстров. В какой-то год с какой-то радости в советской школе перестали изучать комплексные числа. Неужели понятие «число» для школьника менее важно, чем пресловутая расправа над монстрами? Давным давно в сов. школе помимо математики изучали логику по очень удачному, простому и наглядному учебнику Асмуса. Почему-то прекратили. Я не знаю есть ли сейчас в школе основы мат.логики. Как может даже школьная информатика обойтись без основ булевой алгебры? И с теорией множеств в сов. школе были проблемы. Что уж говорить о таких «узких» темах, как «неравенства», «основы комбинаторики», «основы теории графов». Нет, нельзя! Все силы на борьбу с алгебраическими монстрами! Просто задачи на доказательство встречались крайне редко. Лучше в этом плане обстояло дело в школьной геометрии. По ней даже в обычных школах успеваемость была лучше, чем по алгебре. Почему бы это? У школьной математики тяжелая судьба, будет катастрофой, если такая судьба постигнет школьную информатику.
Точнее: учебник и задачник — к каждой главе там достаточное количество упражнений по теме главы.
Что значит отработка навыка в информатике? Прошли, нпр., цикл со счетчмком. Решили в лоб задачу о счатливых белетах — 6 вложенных циклов. Навык применения циклов со счетчиком отработан? Или нужно еще 100 задач на тривиальное перичисление в лоб решить? ИМХО если ученик сообразит, как в счастливых билетах сократить число циклов — это будет гораздо полезнее. Удачная задача, что по математике, что по информатике элегантна и красива. М.б. поэтому она выглядит занимательной? Вспомним на минутку, что многие великие математики особо подчеркивали красоту математики — они знали о чем говорят, это были не просто слова без особого смысла.
third112 Автор
В.А.Дагене, Г.К.Григас, К.Ф.Аугутис, 100 задач по программированию, М.: Просвещение, 1993.
(Прошу извинить за опечатку в первой фамилии).
В общем да, хотя игра Жизнь достаточно простая задача. У Кнута сколько помню есть простые задачи: треугольник Паскаля, числа Фибоначчи и т.д. Окулов: первая глава арифметика многоразрядных целых простая и наглядная. Можно взять только сложение и вычитание. И глава 2 комбинаторика не слишком сложная. Графы школьники начинают изучать на органике — надо только сказать, что атомы — вершины, а хим.связи — ребра, а структурная формула — молекулярный граф. Матрицу смежности понять не сложно, как и сосчитать по ней степени вершин (валентности). Но у Окулова есть и более сложные алгоритмы — их можно опустить.
Это Вы про часть 5 (второй том двухтомника). В первой части рекурсия, сортировка, поиск. Но для школьников м.б. сложное изложение. Простую сортировку лучше учить по Вирту.
По обсуждениям этой и этой статей у меня сложилось впечатление, что некоторые учителя стремятся к гораздо большей перегрузке учеников: программирование игр, конструирование роботов и т.д.
akryukov
В заголовке статьи написано, что речь о школьной информатике. Если уж заявлено про школу, то давайте с учетом школьной специфики, которая достаточно сильно отличается от ВУЗовской. В школу идут все люди с небольшими исключениями, а в ВУЗе происходит предварительный отбор по интересам и по способностям. В ВУЗе есть дискретная математика, а в школе — нет. В ВУЗе цель — научить выполнять прикладную и научную работу (в т.ч. на производстве), а в школе нет такой цели.
Между СУБД и БД есть существенная разница, которую нужно учитывать. Грубо говоря, пачка xml файлов можно назвать БД, но нельзя СУБД.
Задача "отобразить таблицу менделеева со ссылками на какой-нибудь справочник" отлично решается путем создания HTML страницы.
Какой еще хим-калькулятор?
Если вас на работе спрашивают за функциональность, которую не заказывали, что вы ответите? Скорее всего "Дайте ТЗ, придумаю как решить". Ну или если вы крутой спец, то "опишите проблему, я придумаю как вам помочь".
Если нет проблемы, то почему не хватает таблицы в HTML странице?
Почему вы считаете нормальным, давать ученикам в школе задачки в духе "придумай сам что-нибудь"?
third112 Автор
Согласен. Но чтобы сделать осознанный выбор, школьник должен почувствовать каждый предмет: химию, математику, информатику.
Ok. Я про стандартные компоненты Дельфи, которые выполняют действия с БД.
В статье предложено усложнить такую задачу:
Нажимаете на клетку элемента — в регистре его атомный вес, умножаете на число этих атомов в молекуле, запоминаете и так со следующим атомом. Потом суммируете по всем атомам — получаете молекулярный вес. Решаете задачку из статьи:
Далее.
В разумных рамках это хорошая практика. Когда я учился, на математике нам задали сделать какие хотим модели из проволоки: пирамиды, призмы и т.д. Потом мы поменялись моделями и считали их объем.
akryukov
Мой исходный посыл не о проблеме выбора ВУЗа, а о различии контекста. Задание для одних УЗ не подходит для других. Одно и то же задание в различной формулировке, с различными ограничениями может подойти к самым разным дисциплинам.
Просто сверстать таблицу менделеева с детализацией по клику — подойдет для базовой информатики в школе.
Химический калькулятор же можно накручивать вплоть до уровня выпускной квалификационной работы в ВУЗе.
third112 Автор
third112 Автор
8 апреля 2019 сделаны дополнения:
Дополнение 1: как работает химический калькулятор
Дополнение 2: примеры задач для фильтров