public override VarBase Perform(ArgList al) { if (al.Count != ReqCount) throw new OtherException("Неверный список аргументов"); al.Reset(); VarBase arg1 = al.Get(); VarBase arg2 = al.Get(); if(!(arg1.IsSingle()&&arg2.IsSingle())) throw new CalcException("Неверные типы операндов"); return (arg1 as SingleVar).and(arg2 as SingleVar); }
public override VarBase Perform(ArgList al) { if (al.Count != ReqCount) throw new OtherException("Неверный список аргументов"); al.Reset(); VarBase arg1 = al.Get(); if (arg1 is IntVar) return ((arg1 as IntVar).Val>0) ? (arg1.Clone() as IntVar) : (new IntVar(-((IntVar) arg1).Val)); else if (arg1 is RealVar) return ((arg1 as RealVar).Val>0) ? (arg1.Clone() as RealVar) : (new RealVar(-((RealVar) arg1).Val)); else throw new CalcException("Неправильные аргументы функции"); }
public override VarBase Perform(ArgList al) { if (al.Count != ReqCount) throw new OtherException("Неверный список аргументов"); al.Reset(); VarBase arg1 = al.Get(); if (!arg1.IsNum()) throw new CalcException("Неправильные аргументы функции"); try { return new RealVar(Math.Acos((arg1 as NumVar).ToDouble())); } catch { throw new CalcException("Ошибка в вычислениях"); } }
public override VarBase Perform(ArgList al) { if (al.Count != ReqCount) throw new OtherException("Invalid argument list"); al.Reset(); VarBase arg1 = al.Get(); VarBase arg2 = al.Get(); VarBase arg3 = al.Get(); if(!arg1.IsSingle()) throw new CalcException("Значение условия не может быть массивом"); if((arg1 as SingleVar).ToBool()) return (arg2.Clone() as VarBase); else return (arg3.Clone() as VarBase); }
public override VarBase Perform(ArgList al) { if(al.Count!=ReqCount) throw new OtherException("Invalid argument list"); al.Reset(); VarBase arg1 = al.Get(); VarBase arg2 = al.Get(); if(!((arg1.IsArray()&&arg2.IsInt()))) { throw new CalcException("Неверные типы операндов"); } return (arg1 as ArrayVar).IsElementDefined((arg2 as IntVar).Val); }
public override VarBase Perform(ArgList al) { if (al.Count != ReqCount) throw new OtherException("Invalid argument list"); al.Reset(); VarBase arg1 = al.Get(); if(!(arg1 is NumVar)) throw new CalcException("Неверные типы операндов"); return (arg1.Clone() as VarBase); }
public override VarBase Perform(ArgList al) { if (al.Count != ReqCount) throw new OtherException("Invalid argument list"); al.Reset(); VarBase arg1 = al.Get(); if(!(arg1 is NumVar)) throw new CalcException("Неверные типы операндов"); else if(arg1 is IntVar) return new IntVar(-(arg1 as IntVar).Val); else return new RealVar(-(arg1 as NumVar).ToDouble()); }
public override VarBase Perform(ArgList al) { if (al.Count != ReqCount) throw new OtherException("Неверный список аргументов"); al.Reset(); return new IntVar(al.Get().IsSingle()); }
public override VarBase Perform(ArgList al) { if (al.Count != ReqCount) throw new OtherException("Invalid argument list"); al.Reset(); VarBase arg1 = al.Get(); if(!arg1.IsSingle()) throw new CalcException("Неверные типы операндов"); return (arg1 as SingleVar).not(); }
public override VarBase Perform(ArgList al) { if (al.Count != ReqCount) throw new OtherException("Invalid argument list"); al.Reset(); VarBase arg1 = al.Get(); VarBase arg2 = al.Get(); if (!(arg1.IsNum()&&arg2.IsNum())) throw new CalcException("Неправильные аргументы функции"); try { return new RealVar( Math.Log( (arg1 as NumVar).ToDouble(), (arg2 as NumVar).ToDouble() ) ); } catch { throw new CalcException("Ошибка в вычислениях"); } }
public override VarBase Perform(ArgList al) { if (al.Count != ReqCount) throw new OtherException("Invalid argument list"); al.Reset(); VarBase arg1 = al.Get(); VarBase arg2 = al.Get(); if (!(arg1.IsString()&&arg2.IsString())) throw new CalcException("Неправильные аргументы функции"); int res = (arg1 as StringVar).Val.IndexOf((arg2 as StringVar).Val); return new IntVar(res); }
public override VarBase Perform(ArgList al) { if (al.Count != ReqCount) throw new OtherException("Invalid argument list"); al.Reset(); VarBase arg1 = al.Get(); if (!arg1.IsArray()) throw new CalcException("Неправильные аргументы функции"); return new IntVar((arg1 as ArrayVar).GetSize()); }
public override VarBase Perform(ArgList al) { if (al.Count != ReqCount) throw new OtherException("Неверный список аргументов"); al.Reset(); VarBase arg1 = al.Get(); return new StringVar(arg1.ToString()); }
public override VarBase Perform(ArgList al) { if (al.Count != ReqCount) throw new OtherException("Неверный список аргументов"); al.Reset(); VarBase arg1 = al.Get(); if (!arg1.IsString()) throw new CalcException("Неправильные аргументы функции"); return new IntVar((arg1 as StringVar).Val.Length); }
public override VarBase Perform(ArgList al) { if (al.Count != ReqCount) throw new OtherException("Invalid argument list"); al.Reset(); VarBase arg1 = al.Get(); VarBase arg2 = al.Get(); if(!(arg1.IsInt()&&arg2.IsInt())) throw new CalcException("Неверные типы операндов"); try { int res = (arg1 as IntVar).Val % (arg2 as IntVar).Val; return new IntVar(res); } catch(System.ArithmeticException ex) { throw new CalcException("Ошибка в вычислениях"); } }
public override VarBase Perform(ArgList al) { if (al.Count != ReqCount) throw new OtherException("Invalid argument list"); al.Reset(); return new IntVar(al.Get().IsString()); }
public override VarBase Perform(ArgList al) { if (al.Count != ReqCount) throw new OtherException("Invalid argument list"); al.Reset(); VarBase arg1 = al.Get(); VarBase arg2 = al.Get(); VarBase arg3 = al.Get(); if(!(arg1.IsString()&&arg2.IsInt()&&arg3.IsInt())) throw new CalcException("Неверные типы операндов"); string str = (arg1 as StringVar).Val; int b = (arg2 as IntVar).Val; int l = (arg3 as IntVar).Val; if ((b < 0) || (l < 0)) throw new CalcException("Неправильные аргументы функции"); int sl = str.Length; if (b >= sl) return new StringVar(""); if (sl - b < l) l = sl - b; return new StringVar(str.Substring(b, l)); }
public override VarBase Perform(ArgList al) { if (al.Count != ReqCount) throw new OtherException("Invalid argument list"); al.Reset(); VarBase arg1 = al.Get(); VarBase arg2 = al.Get(); if(!(arg1.IsNum()&&arg2.IsNum())) throw new CalcException("Неверные типы операндов"); return (arg1 as NumVar).mul(arg2 as NumVar); }
public override VarBase Perform(ArgList al) { if (al.Count != ReqCount) throw new OtherException("Invalid argument list"); al.Reset(); VarBase arg1 = al.Get(); if (arg1.IsArray()) throw new CalcException("Ошибка преобразования"); if(arg1.IsString()) { try { int i = System.Convert.ToInt32((arg1 as StringVar).Val); return new IntVar(i); } catch { throw new CalcException("Ошибка преобразования"); } } else if (arg1.IsReal()) { return new IntVar(System.Convert.ToInt32((arg1 as RealVar).Val)); } else if (arg1.IsInt()) { return (arg1.Clone() as VarBase); } else return null; }
//**************************************************************************************************** public VarBase Perform(ArgList al) { Namespace ns = new Namespace(InterprEnvironment.Instance.CurrentNamespace); ns["result"] = new IntVar(0); int argc = m_args.Count; if (al.Count != argc) throw new CalcException("Ќеверное число параметров"); al.Reset(); for (int i = 0; i < argc; i++) { ns[m_args[i] as System.String] = al.Get(); } InterprEnvironment.Instance.CurrentNamespace = ns; Moment moment = new Moment(this); if (m_count > 1) { try { moment.Run(); } catch (SyntaxErrorException ex) { throw ex; } catch (CalcException ex) { throw new CalcException("ќшибка в функции " + m_name + "[] в строке " + (moment.Pos + 1) + " : " + ex.Message); } } VarBase res = ns["result"]; InterprEnvironment.Instance.CurrentNamespace = ns.PreviousNamespace; if (res == null) throw new CalcException("ќшибка в функции " + m_name + "[] : переменна¤ result не определена на момент выхода"); return res; }
public override VarBase Perform(ArgList al) { if (al.Count != ReqCount) throw new OtherException("Invalid argument list"); al.Reset(); VarBase arg1 = al.Get(); if (arg1.IsArray()) throw new CalcException("Ошибка преобразования"); if(arg1.IsString()) { try { double d = System.Convert.ToDouble((arg1 as StringVar).Val); return new RealVar(d); } catch { throw new CalcException("Ошибка преобразования"); } } else if (arg1.IsNum()) { return new RealVar((arg1 as NumVar).ToDouble()); } else return null; }