<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Derivar funciones polinómicas en Java 21]]></title><description><![CDATA[Derivar funciones polinómicas en Java 21]]></description><link>https://derivar-funciones-polinomicas-en-java-21.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Fri, 26 Jun 2026 15:42:46 GMT</lastBuildDate><atom:link href="https://derivar-funciones-polinomicas-en-java-21.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Cómo derivar funciones polinómicas en Java 21 con un programa simple y moderno]]></title><description><![CDATA[Introducción
Derivar funciones polinómicas es una de las operaciones más básicas en cálculo, pero también una excelente forma de entender cómo representar y manipular expresiones matemáticas en código.En este artículo veremos cómo construir un progra...]]></description><link>https://derivar-funciones-polinomicas-en-java-21.hashnode.dev/como-derivar-funciones-polinomicas-en-java-21-con-un-programa-simple-y-moderno</link><guid isPermaLink="true">https://derivar-funciones-polinomicas-en-java-21.hashnode.dev/como-derivar-funciones-polinomicas-en-java-21-con-un-programa-simple-y-moderno</guid><category><![CDATA[Mathematics]]></category><category><![CDATA[derivatives]]></category><dc:creator><![CDATA[Jhon Torres]]></dc:creator><pubDate>Mon, 20 Oct 2025 05:00:00 GMT</pubDate><content:encoded><![CDATA[<h3 id="heading-introduccion">Introducción</h3>
<p>Derivar funciones polinómicas es una de las operaciones más básicas en cálculo, pero también una excelente forma de entender cómo representar y manipular expresiones matemáticas en código.<br />En este artículo veremos cómo construir un programa en <strong>Java 21</strong> capaz de recibir un polinomio introducido por el usuario y devolver su derivada simbólica.</p>
<p>El objetivo no es usar librerías matemáticas externas, sino aprovechar expresiones regulares, manipulación de cadenas y las características modernas del lenguaje para construir una solución directa y legible.</p>
<hr />
<h3 id="heading-concepto-matematico">Concepto matemático</h3>
<p>La derivada de un polinomio se calcula aplicando la regla general:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1760972582339/0a55d834-d18d-4f42-9050-ad43b5c73604.png" alt class="image--center mx-auto" /></p>
<p>Por ejemplo:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1760972589797/ad9fd628-6dab-4c57-b708-e97d51e33947.png" alt class="image--center mx-auto" /></p>
<p>El algoritmo debe reconocer los coeficientes, exponentes y signos de cada término para luego aplicar esta transformación.</p>
<hr />
<h3 id="heading-codigo-completo">Código completo</h3>
<pre><code class="lang-java"><span class="hljs-keyword">import</span> java.util.*;
<span class="hljs-keyword">import</span> java.util.regex.*;

<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">DerivadaPolinomio</span> </span>{

    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> </span>{
        Scanner sc = <span class="hljs-keyword">new</span> Scanner(System.in);
        System.out.print(<span class="hljs-string">"Ingrese un polinomio (ejemplo: 3x^3 - 2x^2 + x - 5): "</span>);
        String input = sc.nextLine().replaceAll(<span class="hljs-string">"\\s+"</span>, <span class="hljs-string">""</span>);
        sc.close();

        String derivada = derivarPolinomio(input);
        System.out.println(<span class="hljs-string">"Derivada: "</span> + derivada);
    }

    <span class="hljs-function"><span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> String <span class="hljs-title">derivarPolinomio</span><span class="hljs-params">(String polinomio)</span> </span>{
        List&lt;String&gt; terminos = dividirTerminos(polinomio);
        List&lt;String&gt; resultado = <span class="hljs-keyword">new</span> ArrayList&lt;&gt;();

        <span class="hljs-keyword">for</span> (String termino : terminos) {
            String derivado = derivarTermino(termino);
            <span class="hljs-keyword">if</span> (!derivado.isEmpty()) resultado.add(derivado);
        }

        String derivada = String.join(<span class="hljs-string">" "</span>, resultado)
                .replaceAll(<span class="hljs-string">"\\+ -"</span>, <span class="hljs-string">"- "</span>)
                .replaceAll(<span class="hljs-string">"\\s+"</span>, <span class="hljs-string">" "</span>);
        <span class="hljs-keyword">return</span> derivada.isEmpty() ? <span class="hljs-string">"0"</span> : derivada.trim();
    }

    <span class="hljs-function"><span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> List&lt;String&gt; <span class="hljs-title">dividirTerminos</span><span class="hljs-params">(String polinomio)</span> </span>{
        List&lt;String&gt; terminos = <span class="hljs-keyword">new</span> ArrayList&lt;&gt;();
        Matcher m = Pattern.compile(<span class="hljs-string">"([+-]?[^+-]+)"</span>).matcher(polinomio);
        <span class="hljs-keyword">while</span> (m.find()) terminos.add(m.group());
        <span class="hljs-keyword">return</span> terminos;
    }

    <span class="hljs-function"><span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> String <span class="hljs-title">derivarTermino</span><span class="hljs-params">(String termino)</span> </span>{
        <span class="hljs-keyword">if</span> (!termino.contains(<span class="hljs-string">"x"</span>)) <span class="hljs-keyword">return</span> <span class="hljs-string">""</span>;

        <span class="hljs-keyword">double</span> coeficiente = <span class="hljs-number">1.0</span>;
        <span class="hljs-keyword">int</span> exponente = <span class="hljs-number">1</span>;

        Matcher m = Pattern.compile(<span class="hljs-string">"([+-]?\\d*(?:\\.\\d+)?)x(?:\\^(\\d+))?"</span>).matcher(termino);
        <span class="hljs-keyword">if</span> (m.matches()) {
            String coefStr = m.group(<span class="hljs-number">1</span>);
            String expStr = m.group(<span class="hljs-number">2</span>);

            <span class="hljs-keyword">if</span> (!coefStr.isEmpty() &amp;&amp; !coefStr.equals(<span class="hljs-string">"+"</span>) &amp;&amp; !coefStr.equals(<span class="hljs-string">"-"</span>))
                coeficiente = Double.parseDouble(coefStr);
            <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (coefStr.equals(<span class="hljs-string">"-"</span>))
                coeficiente = -<span class="hljs-number">1.0</span>;

            <span class="hljs-keyword">if</span> (expStr != <span class="hljs-keyword">null</span>)
                exponente = Integer.parseInt(expStr);
        }

        <span class="hljs-keyword">double</span> nuevoCoef = coeficiente * exponente;
        <span class="hljs-keyword">int</span> nuevoExp = exponente - <span class="hljs-number">1</span>;

        <span class="hljs-keyword">if</span> (nuevoExp == <span class="hljs-number">0</span>)
            <span class="hljs-keyword">return</span> formatearNumero(nuevoCoef);
        <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (nuevoExp == <span class="hljs-number">1</span>)
            <span class="hljs-keyword">return</span> formatearNumero(nuevoCoef) + <span class="hljs-string">"x"</span>;
        <span class="hljs-keyword">else</span>
            <span class="hljs-keyword">return</span> formatearNumero(nuevoCoef) + <span class="hljs-string">"x^"</span> + nuevoExp;
    }

    <span class="hljs-function"><span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> String <span class="hljs-title">formatearNumero</span><span class="hljs-params">(<span class="hljs-keyword">double</span> num)</span> </span>{
        <span class="hljs-keyword">if</span> (num == (<span class="hljs-keyword">int</span>) num) <span class="hljs-keyword">return</span> String.valueOf((<span class="hljs-keyword">int</span>) num);
        <span class="hljs-keyword">return</span> String.valueOf(num);
    }
}
</code></pre>
<hr />
<h3 id="heading-explicacion-paso-a-paso">Explicación paso a paso</h3>
<ol>
<li><p><strong>Entrada del usuario</strong><br /> Se lee el polinomio en formato texto y se eliminan los espacios para procesar cada término de forma limpia.</p>
</li>
<li><p><strong>División de términos</strong><br /> Se usa una expresión regular <code>([+-]?[^+-]+)</code> para capturar cada bloque que representa un término, incluyendo su signo.</p>
</li>
<li><p><strong>Derivación de cada término</strong><br /> Se identifica el coeficiente y exponente usando <code>Matcher</code> y se aplica la regla</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1760972656902/0971bd93-202a-4cfb-818d-8f2179f9e4c4.png" alt class="image--center mx-auto" /></p>
</li>
<li><p><strong>Formateo de salida</strong><br /> Se reconstruye el polinomio derivado, limpiando signos redundantes y simplificando los casos donde el exponente resultante sea 0 o 1.</p>
</li>
</ol>
<hr />
<h3 id="heading-ejemplo-de-ejecucion">Ejemplo de ejecución</h3>
<p><strong>Entrada:</strong></p>
<pre><code class="lang-plaintext">3x^3 - 2x^2 + x - 5
</code></pre>
<p><strong>Salida:</strong></p>
<pre><code class="lang-plaintext">Derivada: 9x^2 - 4x + 1
</code></pre>
]]></content:encoded></item></channel></rss>