(Cartas de controle)
(Dedicado ao Ano Internacional da Tabela Periódica dos Elementos Químicos)
(As últimas adições foram feitas em 8 de abril de 2019. A lista de adições está logo abaixo)

(, )
Lembro que aprendemos sobre o pato. Foram três aulas: geografia, ciências naturais e russo. Na aula de ciências naturais, estudamos o pato como um pato — suas asas, suas patas, como nada, etc. Na aula de geografia, o mesmo pato foi estudado como um habitante do planeta: era preciso mostrar no mapa onde ele vive e onde não vive. Em russo, Serafima Petrovna nos ensinou a escrever "u-t-k-a" e lia algo sobre patos de Brehm. Ela nos informava incidentalmente que em alemão pato é assim, e em francês é assim. Parece que isso era chamado de "método complexo". No geral, tudo era feito "incidentalmente".
Veniamin Kaverin, Dois capitães
Na citação apresentada, Veniamin Kaverin mostrou magistralmente as deficiências do método complexo de ensino, no entanto, em alguns (talvez bastante raros) casos, elementos desse método podem ser justificados. Um desses casos é a Tabela Periódica de D.I. Mendeleev nas aulas de informática escolares. A tarefa de automatizar programaticamente ações padrão com a tabela de Mendeleev é clara para os alunos que começaram a estudar química, e se divide em muitas tarefas químicas típicas. Ao mesmo tempo, dentro da informática, essa tarefa permite demonstrar de forma simples o método das cartas de controle, que pode ser atribuído à programação gráfica, entendida em um sentido amplo como programação por meio de elementos gráficos.
(Adições feitas em 8 de abril de 2019:
Começaremos com a tarefa básica. No caso mais simples, a Tabela Periódica deve ser exibida na tela em uma forma-janela, onde em cada célula está a notação química do elemento: H — hidrogênio, He — hélio, etc. Se o cursor do mouse aponta para uma célula, a notação do elemento e seu número são exibidos em um campo especial na nossa forma. Se o usuário clicar com o botão esquerdo do mouse, a notação e o número do elemento selecionado aparecerão em outro campo da forma.

A tarefa pode ser resolvida em qualquer linguagem de programação universal. Vamos usar o simples e antigo Delphi-7, compreensível para quase todos. Mas antes de programar na linguagem de programação, vamos desenhar duas imagens, por exemplo, no Photoshop. Primeiro, vamos desenhar a Tabela Periódica como queremos que ela apareça no programa. Salvaremos o resultado em um arquivo gráfico. table01.bmp.

Para o segundo desenho, usaremos o primeiro. Vamos preencher sequencialmente as células da tabela, limpas de qualquer gráfico, com cores únicas no modelo de cores RGB. R e G sempre serão 0, enquanto B=1 para o hidrogênio, 2 para o hélio, e assim por diante. Este desenho será nosso mapa de controle, que salvaremos em um arquivo chamado. table2.bmp.

A primeira etapa da programação gráfica no Photoshop está concluída. Vamos para a programação gráfica da GUI na IDE Delphi-7. Para isso, abrimos um novo projeto, onde colocamos um botão de chamada de diálogo na forma principal (tableDlg), onde será feita a manipulação da tabela. Em seguida, trabalhamos com a forma. tableDlg.
Colocamos na forma o componente da classe TImage. Obtemos Image1. Vale ressaltar que, em geral, para projetos maiores, nomes gerados automaticamente do tipo ImageN, onde N podem atingir várias dezenas ou mais — não é o melhor estilo de programação, e deve-se dar nomes mais significativos. Mas, em nosso pequeno projeto, onde N não vai ultrapassar 2, pode-se deixar como foi gerado.
Na propriedade Image1.Picture carregamos o arquivo table01.bmp. Criamos Image2 e carregamos lá nosso mapa de controle table2.bmp. Tornamos esse arquivo pequeno e invisível para o usuário, conforme mostrado no canto inferior esquerdo da forma. Adicionamos elementos de controle adicionais, cujas funções são óbvias. A segunda etapa da programação gráfica da GUI na IDE Delphi-7 está concluída.

Vamos para a terceira etapa — a escrita do código na IDE Delphi-7. O módulo consiste em apenas cinco manipuladores de eventos: criação da forma (FormCreate), movimento do cursor sobre Image1 (Image1MouseMove), clique com o botão esquerdo do mouse na célula (Image1Click) e saída do diálogo usando os botões OK (OKBtnClick) ou Cancelar (CancelBtnClick). Os cabeçalhos desses manipuladores são gerados de maneira padrão usando a IDE.
Código-fonte do módulo:
unidade tabelaUnit;
// Tabela Periódica dos Elementos Químicos de D.I. Mendeleev
//
// third112
// https://habr.com/ru/users/third112/
//
// Índice
// 1) criação de formulário
// 2) trabalho com tabela: especificação e seleção
// 3) saída do diálogo
interface
uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,
Buttons, ExtCtrls;
const
tamanho = 104; // número de elementos
type
TtableDlg = class(TForm)
OKBtn: TButton;
CancelarBtn: TButton;
Bevel1: TBevel;
Image1: TImage; // tabela dos elementos químicos
Label1: TLabel;
Image2: TImage; // mapa de controle
Label2: TLabel;
Edit1: TEdit;
procedure FormCreate(Sender: TObject); // criação de formulário
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); // especificação da célula
procedure Image1Click(Sender: TObject); // seleção da célula
procedure OKBtnClick(Sender: TObject); // OK
procedure CancelarBtnClick(Sender: TObject); // Cancelar
private
{ Declarações Privadas }
TableSymbols: array [1..tamanho] of string [2]; // array de símbolos dos elementos
public
{ Declarações Públicas }
selectedElement: string; // elemento selecionado
currNo: integer; // número atual do elemento
end;
var
tableDlg: TtableDlg;
implementation
{$R *.dfm}
const
PeriodicTableStr1=
'HHeLiBeBCNOFNeNaMgAlSiPSClArKCaScTiVCrMnFeCoNiCuZnGaGeAsSeBrKrRbSrYZrNbMoTcRuRhPdAgCdInSnSbTeIXeCsBaLa';
PeriodicTableStr2='CePrNdPmSmEuGdTbDyHoErTmYbLu';
PeriodicTableStr3='HfTaWReOsIrPtAuHgTlPbBiPoAtRnFrRaAc';
PeriodicTableStr4='ThPaUNpPuAmCmBkCfEsFmMdNoLrKu ';
// criação de formulário ==================================================
procedure TtableDlg.FormCreate(Sender: TObject);
// criação de formulário
var
s: string;
i,j: integer;
begin
currNo := 0;
// inicialização do array de símbolos dos elementos:
s := PeriodicTableStr1 + PeriodicTableStr2 + PeriodicTableStr3 + PeriodicTableStr4;
j := 1;
for i := 1 to tamanho 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 ____________________________________________________
// trabalho com tabela: especificação e seleção =========================================
procedure TtableDlg.Image1MouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
// especificação da célula
var
sl: integer;
begin
sl := GetBValue(Image2.Canvas.Pixels[x,y]);
if sl in [1..tamanho] then
begin
Label1.Caption := intToStr(sl) + ' ' + TableSymbols[sl];
currNo := sl;
end
else
Label1.Caption := 'Selecionar elemento:';
end; // Image1MouseMove ____________________________________________________
procedure TtableDlg.Image1Click(Sender: TObject);
begin
if currNo 0 then
begin
selectedElement := TableSymbols[currNo];
Label2.Caption := intToStr(currNo) + ' ' + selectedElement + ' selecionado';
Edit1.Text := selectedElement;
end;
end; // Image1Click ____________________________________________________
// saída do diálogo ==================================================
procedure TtableDlg.OKBtnClick(Sender: TObject);
begin
selectedElement := Edit1.Text;
hide;
end; // OKBtnClick ____________________________________________________
procedure TtableDlg.CancelarBtnClick(Sender: TObject);
begin
hide;
end; // CancelarBtnClick ____________________________________________________
end.Na nossa versão, tomamos uma tabela com 104 elementos (constante tamanho). É óbvio que esse tamanho pode ser aumentado. As designações dos elementos (símbolos químicos) são registradas em um array TableSymbols. No entanto, por questões de compactação do código-fonte, parece razoável registrar a sequência dessas designações como constantes de string PeriodicTableStr1,…, PeriodicTableStr4, para que, no evento de criação do formulário, o programa distribua automaticamente essas designações pelos elementos do array. Cada designação de elemento consiste em uma ou duas letras latinas, com a primeira letra em maiúscula e a segunda (se houver) em minúscula. Essa regra simples é implementada ao carregar o array. Dessa forma, a sequência de designações pode ser registrada de forma compacta, sem espaços. A divisão da sequência em quatro partes (constantes PeriodicTableStr1,…, PeriodicTableStr4) deve-se a considerações de legibilidade do código-fonte, uma vez que uma linha muito longa pode não caber inteira na tela.
No evento de movimentação do cursor do mouse sobre Image1 o manipulador Image1MouseMove desse evento determina o valor do componente azul da cor do pixel do quadro de controle Image2 para as coordenadas atuais do cursor. Por definição, Image2 esse valor é igual ao número do elemento, se o cursor estiver dentro da célula; zero, se estiver na borda, e 255 em outros casos. As outras ações realizadas pelo programa são triviais e não requerem explicações.
Além dos estilos de programação mencionados acima, vale ressaltar o estilo dos comentários. Estritamente falando, o código considerado é tão pequeno e simples que os comentários parecem não ser muito necessários. No entanto, eles foram adicionados também por razões metodológicas — um código curto permite ilustrar algumas conclusões gerais de forma mais clara. No código apresentado, uma classe é declarada (TtableDlg). Os métodos dessa classe podem ser rearranjados e isso não impactará o funcionamento do programa, mas pode afetar sua legibilidade. Por exemplo, vamos imaginar a sequência:
OKBtnClick, Image1MouseMove, FormCreate, Image1Click, CancelBtnClick.
Pode não parecer muito, mas ler e compreender ficará um pouco mais difícil. Se o número de métodos não fosse cinco, mas sim dezenas, e na seção implementation Eles têm uma ordem completamente diferente da descrita nas classes, e, portanto, o caos só aumentará. Assim, embora seja difícil e talvez até impossível provar rigorosamente, podemos esperar que a introdução de uma ordem adicional melhore a legibilidade do código. Essa ordem adicional é favorecida pela agrupamento lógico de vários métodos que realizam tarefas semelhantes. Cada grupo deve receber um título, por exemplo:
// работа с таблицей: указание и выбор
Esses títulos devem ser copiados para o início do módulo e formatados como um índice. Em alguns casos de módulos longos, esses índices oferecem opções adicionais de navegação. Da mesma forma, no corpo longo de um único método, procedimento ou função, deve-se, em primeiro lugar, marcar o final desse corpo:
end; // FormCreatee, em segundo lugar, em operadores ramificados com chaves programáticas begin – end, deve-se marcar a instrução a que a chave de fechamento se refere:
end; // se s [j] em
end; // para i :=1
end; // FormCreate
Para destacar os títulos dos grupos e os finais dos corpos dos métodos, pode-se adicionar linhas que excedam o comprimento da maioria das instruções e consistam, por exemplo, em caracteres «=» e «_», respectivamente.
Novamente, é preciso esclarecer: temos um exemplo muito simples. E quando o código de um método não cabe em uma única tela, pode ser complicado entender seis ends seguidos para realizar modificações no código. Em alguns compiladores mais antigos, como o Pascal 8000 para OS IBM 360/370, na listagem, era impressa uma coluna de serviço do lado esquerdo, do tipo
B5
…
E5
Isso significava que a chave de fechamento na linha E5 corresponde à chave de abertura na linha B5.
Claro, o estilo de programação é uma questão bastante ambígua, portanto, as ideias expressas aqui devem ser vistas apenas como informações para reflexão. Para dois programadores experientes, cujos estilos variados se tornaram habituais ao longo dos anos, pode ser muito difícil chegar a um consenso. Por outro lado, um estudante que está aprendendo a programar e que ainda não teve tempo de desenvolver seu próprio estilo. Acredito que, neste caso, o professor deve transmitir, ao menos, a seus alunos a ideia simples, mas não óbvia, de que o sucesso de um programa depende em grande parte do estilo em que seu código-fonte é escrito. O aluno pode não seguir o estilo recomendado, mas que ele pelo menos reflita sobre a necessidade de ações 'extras' para melhorar a formatação do código-fonte.
Retornando à nossa tarefa básica sobre a Tabela Periódica: o desenvolvimento futuro pode seguir diferentes direções. Uma dessas direções é referência: ao passar o mouse sobre uma célula da tabela, uma janela informativa aparece, contendo informações adicionais sobre o elemento especificado. Um desenvolvimento adicional seriam os filtros. Por exemplo, dependendo da configuração da janela informativa, poderá conter apenas: as mais importantes informações físico-químicas, informações sobre a história da descoberta, informações sobre a ocorrência na natureza, uma lista das principais substâncias que contêm este elemento, propriedades fisiológicas, o nome em uma língua estrangeira, etc. Lembrando a 'pato' de Kaverin, que inicia este artigo, pode-se dizer que com tal desenvolvimento do programa obteremos um complexo educacional completo nas ciências naturais: além de informática, física e química — biologia, geografia econômica, história da ciência e até mesmo línguas estrangeiras.
Mas a base de dados local não é o limite. O programa se conecta naturalmente à Internet. Ao selecionar um elemento, um link é ativado e, na janela do navegador web, abre-se um artigo da Wikipédia sobre aquele elemento. A Wikipédia, como é sabido, não é uma fonte autoritativa. É possível referenciar fontes confiáveis, como uma enciclopédia química, a BSE, revistas de resumos, solicitar buscas em mecanismos de busca sobre aquele elemento, etc. Assim, os alunos poderão realizar tarefas simples, mas significativas sobre os temas de SGBD e Internet.
Além de consultas sobre elementos individuais, é possível criar uma funcionalidade que marcará, por exemplo, células em uma tabela com diferentes cores, correspondendo a certos critérios. Por exemplo, metais e não-metais. Ou células que são despejadas nos corpos d'água por uma fábrica química local.
Também é possível implementar funções de agenda-organizador. Por exemplo, destacar na tabela os elementos que fazem parte do exame. Em seguida, destacar elementos que foram estudados/revistados pelo aluno durante a preparação para o exame.
Aqui está, por exemplo, uma das tarefas típicas da química escolar:
Dado 10 g de giz. Quantos ácidos clorídricos são necessários para dissolver todo esse giz?
Para resolver esta tarefa, é preciso, ao escrever a reação química e colocar os coeficientes, calcular os pesos moleculares do carbonato de cálcio e do cloreto de hidrogênio, e então montar e resolver uma proporção. Um calculador baseado em nosso programa básico poderá fazer isso. No entanto, também será necessário considerar que o ácido deve ser usado em quantidade razoável e em uma concentração adequada, mas isso já é química, não informática.
Adição 1: como funciona a calculadora químicaVamos analisar o funcionamento do calculador utilizando o exemplo da tarefa descrita acima sobre giz e "solanques". Começamos pela reação:
CaCO3 + 2HCl = CaCl2 + H2O
Aqui vemos que precisaremos dos pesos atômicos dos seguintes elementos: cálcio (Ca), carbono (C), oxigênio (O), hidrogênio (H) e cloro (Cl). No caso mais simples, podemos registrar esses pesos em um array unidimensional, definido como
AtomicMass : array [1..size] of real;onde o índice do array corresponde ao número do elemento. Em um espaço livre na forma tableDlg colocamos dois campos. No primeiro campo está inicialmente escrito: “Primeiro reagente dado”, no segundo — “Segundo reagente encontrar x”. Vamos designar os campos reagent1, reagent2 respectivamente. Outras adições ao programa serão claras a partir do próximo exemplo de funcionamento do calculador.
Digitamos no teclado do computador: 10 g. A mensagem no campo reagent1 muda: “Primeiro reagente dado 10 g”. Agora inserimos a fórmula desse reagente, e o calculador calculará e mostrará seu peso molecular à medida que a entrada é feita.
Clicamos com o botão esquerdo do mouse na célula da tabela com o símbolo Ca. A mensagem no campo reagent1 muda: “Primeiro reagente Ca 40.078 dado 10 g”.
Clicamos com o botão esquerdo do mouse na célula da tabela com o símbolo C. A mensagem no campo reagent1 muda: “Primeiro reagente CaC 52.089 dado 10 g”. Ou seja, o calculador somou os pesos atômicos de cálcio e carbono.
Clique com o botão esquerdo do mouse na célula da tabela com o símbolo O. A mensagem no campo reagent1 muda para: “Reagente 1 CaCO 68.088 dado 10 g”. O calculador adicionou à soma o peso atômico do oxigênio.
Clique com o botão esquerdo do mouse na célula da tabela com o símbolo O. A mensagem no campo reagent1 muda para: “Reagente 1 CaCO2 84.087 dado 10 g”. O calculador adicionou novamente à soma o peso atômico do oxigênio.
Clique com o botão esquerdo do mouse na célula da tabela com o símbolo O. A mensagem no campo reagent1 muda para: “Reagente 1 CaCO3 100.086 dado 10 g”. O calculador adicionou mais uma vez à soma o peso atômico do oxigênio.
Pressione Enter no teclado do computador. A entrada do primeiro reagente está completa e é feita a mudança para o campo reagent2. Vale ressaltar que neste exemplo apresentamos uma versão mínima. Se desejado, é fácil organizar multiplicadores de átomos do mesmo tipo, para não precisar clicar sete vezes seguidas na célula do oxigênio ao inserir a fórmula do cromato (K2Cr2O7).
Clique com o botão esquerdo do mouse na célula da tabela com o símbolo H. A mensagem no campo reagent2 muda para: “Reagente 2 H 1.008 encontre x”.
Clique com o botão esquerdo do mouse na célula da tabela com o símbolo Cl. A mensagem no campo reagent2 muda para: “Reagente 2 HCl 36.458 encontre x”. O calculador somou os pesos atômicos do hidrogênio e do cloro. No equilíbrio da reação acima, há um coeficiente 2 antes do ácido clorídrico. Portanto, clique com o botão esquerdo do mouse no campo reagent2. O peso molecular é duplicado (ao clicar duas vezes, é triplicado, etc.). A mensagem no campo reagent2 muda para: “Reagente 2 2HCl 72.916 encontre x”.
Pressione Enter no teclado do computador. A entrada do segundo reagente está completa e o calculador encontra x pela proporção

O que se buscava encontrar.
Nota 1. O sentido da proporção obtida: para dissolver 100.086 de gesso, são necessários 72.916 Da de ácido, e para dissolver 10 g de gesso são necessários x de ácido.
Nota 2. Coleções de problemas similares:
Homchenko I.G., Coleção de problemas e exercícios de química 2009 (8-11 classe).
Homchenko G.P., Homchenko I.G., Coleção de problemas de química para ingresso em universidades, 2019.
Nota 3. Para simplificar a tarefa, pode-se na versão inicial simplificar a inserção da fórmula e simplesmente adicionar o símbolo do elemento ao final da cadeia da fórmula. Assim, a fórmula do carbonato de cálcio será:
CaCOOO
Mas tal anotação provavelmente não agradará ao professor de química. Criar a anotação correta não é difícil — para isso, é necessário adicionar um array:
formula : array [1..size] of integer;onde o índice é o número do elemento químico, e o valor desse índice é a quantidade de átomos (inicialmente todos os elementos do array são zerados). Deve-se considerar a ordem dos átomos na fórmula, conforme aceito na química. Por exemplo, O3CaC também não será do agrado de muitos. Iremos transferir a responsabilidade para o usuário. Criamos um array:
formulaOrder : array [1..size] of integer; // pode ser mais curtoonde gravamos o número do elemento químico pelo índice de sua primeira aparição na fórmula. Adicionando um átomo currNo na fórmula:
if formula [currNo]=0 then // este átomo apareceu pela primeira vez
begin
orderIndex := orderIndex+1; // no início da entrada da fórmula orderIndex=0
formulaOrder [orderIndex] := currNo;
end;
formula [currNo]:=formula [currNo]+1;Gravando a fórmula em uma string:
s := ''; // string vazia para a fórmula
for i:=1 to orderIndex do // para todos os símbolos químicos na fórmula
begin
s:=s+TableSymbols [ formulaOrder[i]]; // adicionamos o símbolo químico
if formula [formulaOrder[i]]1 then // adicionando a quantidade de átomos
s:=s+ intToStr(formula [formulaOrder[i]]);
end;
Nota 4. Faz sentido garantir a possibilidade de entrada alternativa da fórmula do reagente pelo teclado. Nesse caso, será necessário implementar um simples analisador sintático.
Vale ressaltar que:
Atualmente existem centenas de versões da tabela, e, ao mesmo tempo, os cientistas oferecem novas opções. ()
Os alunos podem mostrar criatividade nessa direção, implementando alguma das opções já sugeridas ou tentar criar a sua própria. Pode parecer que essa é a área menos útil para as aulas de informática. No entanto, na forma da Tabela Periódica apresentada neste artigo, alguns alunos podem não perceber as vantagens significativas dos mapas de controle em relação à solução alternativa usando botões padrão TButton. A forma espiral da tabela (onde as células têm formas diferentes) demonstrará de maneira mais clara as vantagens da solução proposta aqui.

(, )
Adicionalmente, devemos mencionar que sobre uma série de programas de computador existentes para a Tabela de Mendeléiev foi falado recentemente em uma publicação no Habr .
Suplemento 2: exemplos de problemas para filtrosCom filtros, é possível resolver, por exemplo, as seguintes tarefas:
1) Destacar na tabela todos os elementos conhecidos na Idade Média.
2) Destacar todos os elementos conhecidos no momento da descoberta da Lei Periódica.
3) Identificar sete elementos que os alquimistas consideravam metais.
4) Identificar todos os elementos que estão no estado gasoso em condições normais (c.n.).
5) Identificar todos os elementos que estão no estado líquido em c.n.
6) Identificar todos os elementos que estão no estado sólido em c.n.
7) Identificar todos os elementos que podem permanecer expostos ao ar por longos períodos sem alterações significativas em c.n.
8) Identificar todos os metais que se dissolvem em ácido clorídrico.
9) Identificar todos os metais que se dissolvem em ácido sulfúrico em c.n.
10) Identificar todos os metais que se dissolvem em ácido sulfúrico ao serem aquecidos.
11) Identificar todos os metais que se dissolvem em ácido nítrico.
12) Identificar todos os metais que reagem violentamente com água em c.n.
13) Identificar todos os metais.
14) Identificar os elementos amplamente disponíveis na natureza.
15) Identificar os elementos que ocorrem na natureza em estado livre.
16) Identificar os elementos que desempenham um papel fundamental no corpo humano e nos animais.
17) Identificar os elementos que são amplamente utilizados no cotidiano (em estado livre ou em compostos).
18) Identificar os elementos com os quais trabalhar é mais perigoso e requer medidas e equipamentos de proteção especiais.
19) Identificar os elementos que representam a maior ameaça para a ecologia, seja em estado livre ou em compostos.
20) Identificar metais preciosos.
21) Identificar os elementos que têm um valor superior ao dos metais preciosos.
Notas
1) Faz sentido garantir a operação de vários filtros. Por exemplo, se ativar o filtro na solução do problema 1 (todos os elementos conhecidos na Idade Média) e 20 (metais preciosos), serão destacados (por exemplo, com cor) as células com metais preciosos conhecidos na Idade Média (não será destacado, por exemplo, o paládio, descoberto em 1803).
2) Faz sentido garantir o funcionamento de vários filtros de tal modo que cada filtro destaque as células com sua própria cor, mas não remova completamente a seleção de outro filtro (parte da célula em uma cor, parte em outra). Assim, no caso do exemplo anterior, serão visíveis os elementos de interseção dos conjuntos de metais preciosos e aqueles abertos na Idade Média, assim como elementos pertencentes apenas ao primeiro e ao segundo conjuntos. Ou seja, metais preciosos desconhecidos na Idade Média e elementos conhecidos na Idade Média, mas que não são metais preciosos.
3) Faz sentido, após a aplicação do filtro, garantir a possibilidade de outras operações com os resultados obtidos. Por exemplo, após destacar elementos conhecidos na Idade Média, o usuário clica com o botão esquerdo do mouse no elemento destacado e é levado ao artigo da Wikipédia sobre esse elemento.
4) Faz sentido garantir que o usuário possa remover a seleção clicando com o botão esquerdo do mouse na célula da tabela destacada. Por exemplo, para remover elementos já visualizados.
5) Faz sentido garantir a salvaguarda da lista de células destacadas em um arquivo e a carga desse arquivo com a seleção automática das células. Isso dará ao usuário a possibilidade de fazer uma pausa no trabalho.
Utilizamos um mapa de controle estático pré-determinado, porém existem muitas tarefas importantes onde podem ser utilizados mapas de controle dinâmicos, que mudam ao longo do funcionamento do programa. Um exemplo pode ser um editor de grafos, onde o usuário, usando o mouse, indica na janela as posições dos vértices e desenha as arestas entre eles. Para remover um vértice ou aresta, o usuário deve apontar para ele. Mas, enquanto é relativamente fácil apontar para um vértice marcado com um círculo, será mais difícil fazer isso com uma aresta desenhada com uma linha fina. Aqui, um mapa de controle ajudará, onde os vértices e arestas ocupam uma vizinhança mais ampla do que na imagem visível.
Um interessante subproduto relacionado ao método de aprendizado complexo é: este método pode ser útil no treinamento de IA?
Fonte: habr.com
