You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.6 KiB
68 lines
1.6 KiB
use std::io;
|
|
use std::io::Write;
|
|
|
|
fn raiz_cuadrada_de_positivo(x: f64) -> f64 {
|
|
if x == 1.0 {
|
|
return 1.0;
|
|
}
|
|
|
|
let mut izq: f64;
|
|
let mut der: f64;
|
|
|
|
if x < 1.0 {
|
|
izq = x;
|
|
der = 1.0;
|
|
} else {
|
|
izq = 1.0;
|
|
der = x;
|
|
}
|
|
|
|
let mut r: f64 = (izq + der) / 2.0;
|
|
|
|
while f64::abs(x - r * r) > 0.0000000001 {
|
|
if r * r < x {
|
|
izq = r;
|
|
} else {
|
|
der = r;
|
|
}
|
|
|
|
r = (izq + der) / 2.0;
|
|
}
|
|
|
|
r
|
|
}
|
|
|
|
fn main() {
|
|
println!("**********************************************************");
|
|
println!("Se ingresa un valor numerico, se muestra su raiz cuadrada.");
|
|
println!("Se utiliza el algoritmo de la biseccion.");
|
|
println!("**********************************************************");
|
|
|
|
print!("x: ");
|
|
io::stdout().flush().expect("Error de escritura!");
|
|
|
|
let mut renglon: String = String::new();
|
|
io::stdin()
|
|
.read_line(&mut renglon)
|
|
.expect("Error de lectura!");
|
|
let x: f64 = renglon.trim().parse::<f64>().expect("Se esperaba un numero!");
|
|
|
|
if x == 0.0 {
|
|
println!("La raiz cuadrada de 0 es 0.00000000");
|
|
} else {
|
|
let rc: f64 = raiz_cuadrada_de_positivo(f64::abs(x));
|
|
|
|
if x < 0.0 {
|
|
if x == -1.0 {
|
|
println!("Las raices cuadradas de -1 son +i y -i");
|
|
} else {
|
|
println!(
|
|
"Las raices cuadradas de {} son +{:.8}i y -{:.8}i",
|
|
x, rc, rc
|
|
);
|
|
}
|
|
} else {
|
|
println!("Las raices cuadradas de {} son +{:.8} y -{:.8}", x, rc, rc);
|
|
}
|
|
}
|
|
}
|
|
|