Buenas tardes a todos , tengo una gran duda que seria de mucha ayuda que si me la aclararan seria genial.
El siguiente programa es un programa que sin el uso de librerias calcula la raiz cuadrada de un numero , mi duda es la siguiente ¿ Cual es el funcionamiento ? , me refiero a que si me ponen el programa como yo se que se trata de calcular la raiz cuadrada del numero , alguien me explica que hace cada paso porfavor gracias.
#include<iostream>
#include<stdlib.h>
using namespace std;
int main()
{
int numero=0;
double i=0, calculo=0;
while (numero <= 1 || numero >= 100000)
{
cout << "ingrese numero = ";
cin >> numero;
}
while (calculo <= numero)
{
i = i + 0.000001;
calculo = i*i;
}
cout << "La solucion es = "<<i<<endl;
system("pause");
return i;
}
MUCHAS GRACIAS AL QUE PUEDA AYUDARME .
Una pregunta muy burda, realmente sabes algo de C o de C++, por que tu codito tiene tanto iostream como stdio y realmente no estas usando nada de stdio.
La parte interesante de tu codigo es:
i = i + 0.000001;
calculo = i*i;
Donde itera sucesivamente cada 0.000001. hasta que encuentra un producto tal que i*i sea igual o un poco mayor al numero buscado.
Basicamente el programa realiza fuerza bruta probando "todas" las posibilidades, lo cual es INEFICIENTE
Saludos!
Básicamente empiezas con i que vale 0,000001
Y mientras el cuadrado de i no supere el número buscado se sumará 0,000001.
De hecho tu el programa tiene una falla. Lo verás en el ejemplo:
Por pasos y en vez de 0,000001 supongamos 1 para la suma. Y que 9 es el número al que se busca la raíz cuadrada.
i = 1
i * i < 9 : 1 * 1 = 1; 1 < 9? Sí, recalcula
i = i + 1: i = 1+1; i = 2
i * i < 9 : 2 * 2 = 4; 4 < 9? Sí, recalcula
i = i + 1: i = 2+1; i = 3
i * i < 9 : 3 * 3 = 4; 9 < 9? No, fin
Cómo ves, la condición para continuar el bucle es i * i < num. Si hubiera sido i * i <= num habría habido un recalculado e i hubiera valido 4. Y 4 es la raíz cuadrada de 16.
Cita de: MAFUS en 15 Noviembre 2018, 22:04 PM
Básicamente empiezas con i que vale 0,000001
Y mientras el cuadrado de i no supere el número buscado se sumará 0,000001.
De hecho tu el programa tiene una falla. Lo verás en el ejemplo:
Por pasos y en vez de 0,000001 supongamos 1 para la suma. Y que 9 es el número al que se busca la raíz cuadrada.
i = 1
i * i < 9 : 1 * 1 = 1; 1 < 9? Sí, recalcula
i = i + 1: i = 1+1; i = 2
i * i < 9 : 2 * 2 = 4; 4 < 9? Sí, recalcula
i = i + 1: i = 2+1; i = 3
i * i < 9 : 3 * 3 = 4; 9 < 9? No, fin
Cómo ves, la condición para continuar el bucle es i * i < num. Si hubiera sido i * i <= num habría habido un recalculado e i hubiera valido 4. Y 4 es la raíz cuadrada de 16.
Excelente muchisimas gracias por tu ayuda bien explicado.
Cita de: Estudiante000000 en 15 Noviembre 2018, 20:55 PM
Buenas tardes a todos , tengo una gran duda que seria de mucha ayuda que si me la aclararan seria genial.
El siguiente programa es un programa que sin el uso de librerias calcula la raiz cuadrada de un numero , mi duda es la siguiente ¿ Cual es el funcionamiento ? , me refiero a que si me ponen el programa como yo se que se trata de calcular la raiz cuadrada del numero , alguien me explica que hace cada paso porfavor gracias.
#include<iostream>
#include<stdlib.h>
using namespace std;
int main()
{
int numero=0;
double i=0, calculo=0;
while (numero <= 1 || numero >= 100000)
{
cout << "ingrese numero = ";
cin >> numero;
}
while (calculo <= numero)
{
i = i + 0.000001;
calculo = i*i;
}
cout << "La solucion es = "<<i<<endl;
system("pause");
return i;
}
MUCHAS GRACIAS AL QUE PUEDA AYUDARME .
Cita de: AlbertoBSD en 15 Noviembre 2018, 21:52 PM
Una pregunta muy burda, realmente sabes algo de C o de C++, por que tu codito tiene tanto iostream como stdio y realmente no estas usando nada de stdio.
La parte interesante de tu codigo es:
i = i + 0.000001;
calculo = i*i;
Donde itera sucesivamente cada 0.000001. hasta que encuentra un producto tal que i*i sea igual o un poco mayor al numero buscado.
Basicamente el programa realiza fuerza bruta probando "todas" las posibilidades, lo cual es INEFICIENTE
Saludos!
Muchisimas gracias saludos crack!