/// <summary> /// Permite efectuar a leitura de um polinómio a partir de texto. /// </summary> /// <remarks> /// Se a leitura não for bem sucedida, é lançada uma excep~ção. /// </remarks> /// <param name="polynomial">O texto.</param> /// <returns>O polinómio.</returns> public UnivariatePolynomialNormalForm <int> Read(string polynomial) { var integerDomain = new IntegerDomain(); var integerParser = new IntegerParser <string>(); var conversion = new ElementToElementConversion <int>(); var polInputReader = new StringReader(polynomial); var polSymbolReader = new StringSymbolReader(polInputReader, false); var polParser = new UnivariatePolynomialReader <int, CharSymbolReader <string> >( "x", integerParser, integerDomain); var result = default(UnivariatePolynomialNormalForm <int>); if (polParser.TryParsePolynomial(polSymbolReader, conversion, out result)) { // O polinómio foi lido com sucesso. return(result); } else { // Não é possível ler o polinómio. throw new Exception("Can't read integer polynomial."); } }
/// <summary> /// Permite realizar a leitura de um polinómio a partir de uma representação textual. /// </summary> /// <typeparam name="T">O tipo dos coeficientes do polinómio.</typeparam> /// <param name="polynomialRepresentation">A representação textual do polinómio.</param> /// <param name="ring">O anel responsável pelas operações sobre os coeficientes.</param> /// <param name="coeffsParser">O leitor de representações textuais para os coeficientes.</param> /// <param name="conversion">A conversão do tipo do coeficientes para inteiro.</param> /// <param name="variableName">O nome da variável.</param> /// <param name="readNegativeNumbers"> /// Indica se os números negativos são para ser lidos ou se é lido /// o sinal e depois o respectivo valor como símbolos independentes.</param> /// <returns>O polinómio lido a partir da representação textual.</returns> public static UnivariatePolynomialNormalForm <T> ReadUnivarPolynomial <T>( string polynomialRepresentation, IRing <T> ring, IParse <T, string, string> coeffsParser, IConversion <int, T> conversion, string variableName, bool readNegativeNumbers = false) { var polInputReader = new StringReader(polynomialRepresentation); var polSymbolReader = new StringSymbolReader(polInputReader, readNegativeNumbers); var polParser = new UnivariatePolynomialReader <T, CharSymbolReader <string> >( "x", coeffsParser, ring); var result = default(UnivariatePolynomialNormalForm <T>); if (polParser.TryParsePolynomial(polSymbolReader, conversion, out result)) { // O polinómio foi lido com sucesso. return(result); } else { // Não é possível ler o polinómio. throw new Exception("Can't read polynomial."); } }
/// <summary> /// Permite efectuar a leitura de um polinómio com coeficientes fraccionários a partir de texto. /// </summary> /// <remarks> /// Se a leitura não for bem sucedida, é lançada uma excep~ção. /// </remarks> /// <param name="polynomial">O texto.</param> /// <returns>O polinómio.</returns> public UnivariatePolynomialNormalForm <Fraction <BigInteger> > Read(string polynomial) { var integerDomain = new BigIntegerDomain(); var fractionField = new FractionField <BigInteger>(integerDomain); var integerParser = new BigIntegerParser <string>(); var fractionParser = new FieldDrivenExpressionParser <Fraction <BigInteger> >( new SimpleElementFractionParser <BigInteger>(integerParser, integerDomain), fractionField); var conversion = new IntegerBigIntFractionConversion(integerDomain, new BigIntegerToIntegerConversion()); var polInputReader = new StringReader(polynomial); var polSymbolReader = new StringSymbolReader(polInputReader, false); var polParser = new UnivariatePolynomialReader <Fraction <BigInteger>, CharSymbolReader <string> >( "x", fractionParser, fractionField); var result = default(UnivariatePolynomialNormalForm <Fraction <BigInteger> >); if (polParser.TryParsePolynomial(polSymbolReader, conversion, out result)) { // O polinómio foi lido com sucesso. return(result); } else { // Não é possível ler o polinómio. throw new Exception("Can't read integer polynomial."); } }
/// <summary> /// Permit realizar a leitura de um polinómio com coeficientes fraccionários. /// </summary> /// <typeparam name="T">O tipo de dados dos componentes das fracções.</typeparam> /// <param name="polynomialRepresentation">A representação polinomial.</param> /// <param name="domain">O domínio responsável pelas operações sobre os elementos das fracções.</param> /// <param name="itemsParser">O leitor de elementos da fracção.</param> /// <param name="conversion">A conversão entre cada fracção e o valor inteiro.</param> /// <param name="variableName">O nome da variável.</param> /// <param name="readNegativeNumbers">Indica se são lidos os números negativos.</param> /// <returns>O polinómio lido.</returns> public static UnivariatePolynomialNormalForm <Fraction <T> > ReadFractionalCoeffsUnivarPol <T, D>( string polynomialRepresentation, D domain, IParse <T, string, string> itemsParser, IConversion <int, Fraction <T> > conversion, string variableName, bool readNegativeNumbers = false) where D : IEuclidenDomain <T> { var fractionField = new FractionField <T>(domain); var fractionParser = new FieldDrivenExpressionParser <Fraction <T> >( new SimpleElementFractionParser <T>(itemsParser, domain), fractionField); var polInputReader = new StringReader(polynomialRepresentation); var polSymbolReader = new StringSymbolReader(polInputReader, readNegativeNumbers); var polParser = new UnivariatePolynomialReader <Fraction <T>, CharSymbolReader <string> >( "x", fractionParser, fractionField); var result = default(UnivariatePolynomialNormalForm <Fraction <T> >); if (polParser.TryParsePolynomial(polSymbolReader, conversion, out result)) { // O polinómio foi lido com sucesso. return(result); } else { // Não é possível ler o polinómio. throw new Exception("Can't read polynomial."); } }