
Muy buenos dias, soy estudiante de ingenieria de sistemas apenas estoy comenzando y me acaban de dejar el primer taller de scheme y me e quedado estancado en dos puntos y me pregunto si me podrian ayudar 

int nroots(double a, double b, double c) {
double d = b*b - 4.0*a*c;
if (std::abs(d) < 1e-9)
return 1;
else if (d < 0.0)
return 0;
else
return 2;
}
Nota: en lugar de comparar el discriminante con el valor 0, es buena práctica compararlo con un intervalo muy pequeño (e.g. 1e-9) para evitar problemas de representación numérica. Al ser un curso de Fundamentos de Programación, dudo que se exija eso, y con hacer d == 0.0 sería suficiente.enum movement {
LEFT,
RIGHT
};
double move (double minX, double maxX, double x, double r, double dx, movement movimiento) {
dx = std::abs(dx);
if (movimiento == LEFT)
dx *= -1.0;
minX += r;
maxX -= r;
if (minX < maxX)
return std::min(maxX, std::max(minX, x + dx));
else
return x;
}
Nota: al utilizar el signo de dx para calcular la dirección del movimiento se está asumiendo que el parámetro de entrada dx es positivo, y puesto que no se especifica que dicho parámetro será siempre positivo, debemos asegurarnos que así lo sea. Algo similar pasa al modificar los límites: puede ser que los nuevos límites calculados sean incompatibles, y que la nueva posición no sea válida. También habría que comprobar la posición de entrada de la bola es válida en un pricipio...