Calculadora de caracteres em c #

De alguma forma, eu precisava de uma biblioteca em c #, que pode fazer cálculos simbólicos (de tempos em tempos, suplemento os recursos de um programa matemático). Qualquer código fonte na rede pode ser encontrado em diferentes idiomas, mas não foi possível encontrar algo mais simples e compreensível. Ele chamou a atenção para Jasymca (Java Symbolic Calculator) .

Desafio


Para implementar um análogo do bloco Mathcad odesolve no SMath Studio, foi necessário resolver equações para derivadas. Não há restrições especiais no sistema ODE solucionável. O que o usuário define em um formato relativamente arbitrário deve ser convertido em um formato conveniente para a solução numérica do ODE. Deve ficar assim:



Conhecer as possibilidades da linguagem c # acabou sendo difícil para mim aqui no caso geral. A ajuda do mecanismo do personagem não faria mal.

Conversão de origem


Eu olhei o código fonte do applet. Parece não muito assustador, mas você precisa de um conversor Java em c #. No momento em que estava começando a fazer isso, encontrei um recurso on-line mais ou menos funcional, do qual não conseguia me lembrar agora. Parece que foi um recurso da Tangible Software Solutions, como os comentários no código-fonte são semelhantes aos feitos pelo conversor atual como um programa.
Tudo é bom, mas uma coisa é ruim. O recurso convertido gratuitamente apenas o tamanho limitado da fonte. Limite verdadeiro no número de linhas. É muito estranho, pensei, e cegou todo o conteúdo em um arquivo em uma linha. Em seguida, converti as fontes de linha única para o equivalente em c # gratuitamente e as restaurei ao normal no Visual Studio usando a formatação automática.

Finalização de arquivo


Desnecessário dizer que o conversor automático é convertido na maior parte do tempo, mas com o conteúdo em que você ainda precisa trabalhar. Naquela época, percebi que claramente não tinha níveis suficientes nos dois idiomas para resolver todos os problemas de compilação. O tempo passou, reverenciado John Skeet. O camarada Skeet instilou determinação.

No processo de luta pela compilação, o conversor se lembrou com uma palavra gentil. Ele fez quase todo o trabalho tedioso. Ele não dominou apenas a parte matemática em alguns momentos. Tratava-se de uma grande classe de JMath. A conversão de representação dupla em hexadecimal e vice-versa permaneceu em alguns casos em uma restrição para o método BitConverter.Int64BitsToDouble (), que não funciona com algumas constantes longas não assinadas, por exemplo -0 ( 0x8000000000000000 ). Aqui, novamente, o camarada Skeet veio em socorro, não sem cuja ajuda conseguimos apresentar esse valor como 1,0 / double.NegativeInfinity. Em geral, essa aritmética do "infinitesimal" ainda me assombra, porque Não tenho certeza da interpretação correta de tudo o que o autor Jasymca tinha em mente.

Após corrigir alguns erros semânticos, substituir o trabalho por tipos e suas instâncias e adicionar uma interface de console, conseguimos iniciar esse projeto. Há muito que eu queria olhar para a cozinha interior de tais programas simbólicos. C ++ simbólico é uma coisa e Java ou C # é outra. O limite de entrada é muito menor.

No momento da escrita, a calculadora fica assim:



O arquivo executável está disponível no repositório . Requer .Net 2.0. Existe uma dependência do LinqBridge for Linq para funcionar no .Net 2.0 (a biblioteca está anexada lá).

Quase tudo funciona a partir da documentação do autor Jasymca. A exceção é trabalhar com gráficos, ou seja, funções de plotagem. Eu acho que será mais fácil escrever essa parte novamente do que portar. Funções dependentes de bibliotecas de terceiros (LAPACK, etc.) não estão incluídas. Também existem falhas que serão eliminadas ao longo do tempo.

Conclusão


O projeto foi criado para os amantes da matemática simbólica. Se desejado, ele pode ser trazido para a biblioteca e usado em seus próprios projetos, onde é necessária matemática numérica ou simbólica simples: trabalhando com números complexos, integração, diferenciação, resolução de equações, etc. O autor Jasymca posicionou o programa como uma ferramenta de treinamento para quem deseja criar seu próprio programa. realizando cálculos simbólicos:
O Jasymca foi desenvolvido para o ensino de matemática, especialmente para facilitar uma entrada rápida e fácil na matemática dos computadores. Um dos principais obstáculos são as calculadoras de bolso, que impedem muitos estudantes de usar computadores para matemática. As calculadoras de bolso são baratas e portáteis, enquanto os programas CAS geralmente são caros e sempre exigem pelo menos um laptop para serem executados. O Jasymca é um software livre e roda em praticamente qualquer sistema equipado com um microprocessador: de telefones celulares e pdas a computadores windows / linux / macos, mesmo em consoles de jogos ou roteadores de internet.
Espero que a versão c # do código fonte seja útil para você também.

Referências


1. Jasymca (Java Symbolic Calculator) .
2. Fontes de Jasymca (zip) .
3. Jasymca 2.0 - Calculadora Simbólica para Java (Manual, pdf) .
4. Uma visão geral dessas bibliotecas Java .
5. O repositório do projeto .

Source: https://habr.com/ru/post/pt439656/


All Articles