Si bueno, el que he pegado el while hace de -1 a 1 , pero vamos, que luego al hacer pruebas, lo probé de -10 a 10. No hace falta hacer for de positivo y de negativo. Me estoy dando cuenta que tienes metido en la cabeza que hay que mirar positivo por un lado y negativo por otro, y no es así, para la primera raíz, buscas de negativo a positivo y en la segunda lo mismo, no hace falta hacer las cosas por separado. Si te fijas, yo inicializo i=-1 pero el while va a hasta 1, es decir miro positivo y negativo a la vez (puedes inicializar a -10 y que vaya a 10, no pasa nada). Si lo intentas con el for podrás quitar una parte del código. Lo de la raíz con decimal aún sigo con ello, a ver si alguien entra y me dice qué pasa
#include <stdio.h>#include <stdlib.h>#include <math.h>int main (){ int a, b, c; int i, r1, r2, k; printf("Ingrese los coeficientes de la ecuacion para mostrar sus raices"); printf("\nIngrese el primer coeficiente: "); scanf("%d", &a); printf("\nIngrese el segundo coeficiente: "); scanf("%d", &b); printf("\nIngrese el tercer coeficiente: "); scanf("%d", &c); /* * El primer for que va ascenso * */ for(i= -100 ; i<=100 ; i++){ /* Primera operacion * de la regla de rufini * */ r1= i*a + b; k= r1; r1= k*i + c; if(r1 == 0){ r1= i; printf("\nLa raiz es: %d", r1); } /* * Segunda operación * de la regla de rufini. * */ r2= i * a; r2= r2 + k; if(r2 == 0){ r2= i; printf("\nLa raiz es: %d", r2); } } return 0;}
for(i= -100 ; i<=100 ; i++){ /* Primera operacion * de la regla de rufini * */ r1= i*a + b; k= r1; r1= k*i + c; if(r1 == 0){ r1= i; printf("\nLa raiz es: %d", r1); } /* * Segunda operación * de la regla de rufini. * */ r2= i * a; r2= r2 + k; if(r2 == 0){ r2= i; printf("\nLa raiz es: %d", r2); }}
A ver... pongamos el ejemplo de estos tres coeficientes: 1, -5 y 6 de los cuales las raíces son 2 y 3. Cuando el valor de i llegue a 2, r1 será -3 por lo tanto pongo que el valor de k es -3 osea el mismo que r1. Entonces pongo que después r1 es igual a k, es decir -3 multiplicado por la i que es 2 y sumado con C que 6, te da como resultado cero y se cumple el primer if. Recuerda que el valor de k es -3.Código: [Seleccionar]for(i= -100 ; i<=100 ; i++){ /* Primera operacion * de la regla de rufini * */ r1= i*a + b; k= r1; r1= k*i + c; if(r1 == 0){ r1= i; printf("\nLa raiz es: %d", r1); } /* * Segunda operación * de la regla de rufini. * */ r2= i * a; r2= r2 + k; if(r2 == 0){ r2= i; printf("\nLa raiz es: %d", r2); }}A la siguiente vuelta del bucle la "i" ya no es 2 si no que aumenta a 3, es aquí a donde voy porque el primer if se vuelve a cumplir, 3 multiplica a 1 sumado a -5 te da -2, entonces el valor de k es -2 y si multiplicas -2 por i que es 3 te da -6, por ultimo -6 + "c" que es 6 te da cero. En resumen solo se está cumpliendo un solo if y cuando me muestra 3 raíces creo que es porque la ecuación tiene tres posibles raíces, supongo PD:Estaba poniendo coeficientes de las ecuaciones que te muestran en esta página: http://www.vitutor.com/ecuaciones/2/2_e.html y funcionaron bien.
for(i= -100 ; i<=100 ; i++){ /* Primera operacion * de la regla de rufini * */ r1= i*a + b; k= r1; r1= k*i + c; if(r1 == 0){ r1= i; printf("\nLa raiz es: %d", r1); for(r1= i ; r1<= 100 ; i++){ /* * Segunda operación * de la regla de rufini. * */ r2= i * a; r2= r2 + k; if(r2 == 0){ r2= i; printf("\nLa raiz es: %d", r2); } } }}
Ahí ya, sí que no sé que decirte. A mi también me tarda mucho, y diría que algo más de 15 segundos. Aún así, me alegro haberte podido ayudar. Hacía bastante que no hacía esta clase de programas y quería ver si aún me daba el coco para esto, jaja.Saludos