Este programa utiliza el método de Newton-Raphson o de aproximación sucesiva para obtener la raíz cuadrada de un número. Antes de presentarte el código, expliquemos brevemente de qué se trata este método:

El método de Newton es un algoritmo iterativo que nos permite obtener soluciones aproximadas a una ecuación no lineal, por ejemplo, podemos utilizarlo para obtener la raíz cuadrada de un número mediante una serie de aproximaciones. La función que se evalúa incialmente es f(x) = x^2 - a, donde "a" es un número cualquiera. La raíz cuadrada de "a" es la solución a la ecuación f(x) = 0, es decir, el valor de x para el cual la función f(x) se hace cero. El método de Newton se utiliza para encontrar una aproximación de esta solución. Primero se elige un punto inicial, y luego se aplica una fórmula para encontrar una aproximación mejorada de la raíz. En cada iteración, el método utiliza la información sobre la pendiente de la función en el punto actual para encontrar una mejor aproximación de la solución, es decir, esta información se utiliza para encontrar el punto en el eje x donde la curva cruza la línea horizontal que pasa por el punto actual. Para encontrar el punto x en el que la recta tangente intersecta el eje x, podemos tomar la ecuación de la recta tangente, podemos igualar la ecuación de la recta tangente a y=0 (ya que en el eje x el valor de y es 0) y resolver para x, como lo vemos a continuación.

y - f(a) = f'(a) * (x - a)

y establecer y = 0:

0 - f(a) = f'(a) * (x - a)

Resolviendo para x, obtenemos:

x = a - f(a) / f'(a)

Este es el punto en el que la recta tangente cruza el eje x y es el siguiente punto de partida para la siguiente iteración en el método de Newton. Este nuevo punto se convierte en el punto actual y se repite el proceso hasta que se alcance la precisión deseada.

Pasemos al código:

#include <iostream>
#include <cmath>

using namespace std;

double raiz_cuadrada(double x)
{
    double raiz = x / 2;

    while (abs(raiz * raiz - x) > 0.0001)
    {
        raiz = (raiz + x / raiz) / 2;
    }

    return raiz;
}

int main()
{
    double x;

    cout << "Ingrese un número: ";
    cin >> x;

    cout << "La raíz cuadrada de " << x << " es: " << raiz_cuadrada(x) << endl;

    return 0;
}
Es importante aclarar que este programa no utiliza explícitamente la derivada de la función para calcular la raíz cuadrada. En cambio, utiliza una forma iterativa del método de Newton que solo requiere la función original y su evaluación en puntos sucesivos para obtener una mejor aproximación de la raíz. Aunque el concepto de pendiente y tangente son importantes en el método de Newton, el programa no necesita calcularlas de manera explícita.

En el código pasa lo siguiente: En la función principal se declara la variable x de tipo double para manejar números decimales, que se encargará de almacenar el valor del número ingresado por el usuario. Luego se llama a la función raiz cuadrada(double x) y se hace el procedimiento para obtener la raiz. En esta función primero se obtiene el número aproximado de la raíz, que generalmente es cercana a la mitad del número por lo que se divide en double raiz = x/2, se divide entre dos porque es una buena aproximación inicial en la mayoría de los casos, ya que generalmente la mayoría de las raíces cuadradas son menores que la mitad del número, por lo que el número de iteraciones se reduce. Luego se utiliza un bucle while en la que se evalua (abs(raiz * raiz - x) > 0.0001), es decir se hace la operación raiza x raiz -x y se toma su valor absoluto abs y luego se evalua si es mayor que 0.0001. Dentro del ciclo while, se calcula una nueva aproximación de la raíz utilizando la fórmula del método de Newton: raiz = (raiz + x / raiz) / 2. Esta fórmula utiliza la aproximación actual raiz y la divide entre x dividido por la aproximación actual, y luego se calcula el promedio de ambos valores. Este nuevo valor se convierte en la nueva aproximación de la raíz y se repite el proceso hasta que se cumpla la condición del while. Finalmente, cuando se cumple la condición de while se retorna el valor raíz y se imprime en pantalla.

El código ha sido probado en Code::Blocks en Windows, por lo que es completamente funcional.

NOTA: Si al correr el programa los acentos o caracteres especiales no se muestran correctamente, puedes usar esta solución: ¿Cómo mostrar acentos y caracteres especiales en programas escritos en C++?