Статус: Advanced Member Группы: Registered
Зарегистрирован: 21.01.2009(UTC) Сообщений: 182 Откуда: Волгоград Сказал «Спасибо»: 126 раз Поблагодарили: 36 раз в 22 постах
|
Вроде все делал ка на видео, SMatch Studio принимает плагин, но при попытке вставить функцию выдает ошибку: Необрабатываемое исключение в приложении. При нажатии кнопки "Продолжить" приложение проигнорирует ошибку и попытается продолжить работу. При нажатии кнопки "Выход" приложение немедленно завершит работу. Не удалось привести тип объекта "SMatch.MikTools.Plugininitializer" к типу "SMath.Manager.IPluginLowLevelEvaluation". Код:
using System;
using System.Collections.Generic;
using System.Text;
using SMath.Manager;
using SMath.Math;
namespace SMMikTools
{
public class Class1 : IPluginHandleEvaluation, IPluginLowLevelEvaluation
{
private TermInfo[] termInfos;
private AssemblyInfo[] asseblyInfos;
TermInfo[] IPluginHandleEvaluation.TermsHandled
{
get { return this.termInfos; }
}
AssemblyInfo[] IPlugin.Dependences
{
get { return this.asseblyInfos; }
}
#region Члены IPluginHandleEvaluation
public TermInfo[] TermsHandled
{
get { throw new NotImplementedException(); }
}
#endregion
#region Члены IPlugin
public AssemblyInfo[] Dependences
{
get { throw new NotImplementedException(); }
}
public void Initialize()
{
// Список обрабатываются функции плагина
this.termInfos = new TermInfo[] {
new TermInfo("[b]combine[/b]", TermType.Function, 2, "(n, k) - Возвращает число подмножеств", FunctionSection.Unknown, true),
};
// Плагин требует SMath Studio 0,88
this.asseblyInfos = new AssemblyInfo[] {
new AssemblyInfo("SMath Studio", new Version(0, 88), new Guid("a37cba83-b69c-4c71-9992-55ff666763bd")),
};
}
#endregion
#region Члены IDisposable
public void Dispose()
{
// тут ничего быть не должно
}
#endregion
#region Члены IPluginLowLevelEvaluation
public bool ExpressionEvaluation(Term root, Term[][] args, ref Store store, ref Term[] result)
{
//throw new NotImplementedException();
if (root.Type == TermType.Function && root.Text == "[b]combine[/b]" && root.ChildCount == 2)
{
Term[] arg1 = Decision.Preprocessing(args[0], ref store);
Term[] arg2 = Decision.Preprocessing(args[1], ref store);
// Предобработка(«Preprocessing») - описанная выше - действие необходимое,
// что бы правильно подготовить аргументы. Это значит, что все возможные замены будут выполняться.
List <Term >
answer = new List<Term>() ;
//Теперь необходимо составить выражение массива образованное в обратной польской записи для такого математического выражения:
// n1/(k!*(n-k)!)
//В обратной польской записи, это выражение будет выглядеть вот так:
//n ! k ! n k - ! * /
//Таким образом введите следующие строки, составив список Terms:
answer.AddRange(arg1); // <- n
answer.Add (new Term(Operator.Factorial, TermType.Operator, 1)); // !
answer.AddRange(arg2); // <- k
answer.Add (new Term(Operator.Factorial, TermType.Operator, 1)); // !
answer.AddRange(arg1); // <- n
answer.AddRange(arg2); // <- k
answer.Add (new Term(Operator.Substraction,TermType.Operator,2)); // -
answer.Add (new Term(Operator.Multiplication, TermType.Operator,2)); // *
answer.Add (new Term(Operator.Division , TermType.Operator,2)); // /
result = answer.ToArray();
return true ;
}
return false ;
}
#endregion
}
}
Отредактировано пользователем 12 июня 2010 г. 23:33:28(UTC)
| Причина: Не указана |