PDA

Ver la versión completa : programa para factorizar ecuaciones



Giskard
01-11-2002, 20:07
Hola, he hecho un programa que factoriza ecuaciones de segundo grado
ax²+bx+c = (dx+e)(fx+g)
mediante la "fuerza bruta".
Aquí está el codigo fuente para que vean que se le puede mejorar al programa.

/************************************************** *************************
factoriza.cpp - Este programa factoriza
ecuaciones de segundo grado,
los pasa de la forma ax² + bx + c
a la forma (ax+b)(cx+d)
-------------------
Autor: Othoniel García
[email protected]
************************************************** *************************/

/************************************************** *************************
*Este programa es software libre. Puede redistribuirlo y/o modificarlo *
*bajo los términos de la Licencia Pública General de GNU según es *
*publicada por la Free Software Foundation, bien de la versión 2 de dicha *
*Licencia o bien (según su elección) de cualquier versión posterior. *
* *
*Este programa se distribuye con la esperanza de que sea útil, pero SIN *
*NINGÚN TIPO DE GARANTÍA, incluso sin la garantía MERCANTIL implícita o *
*sin garantizar la CONVENIENCIA PARA UN PROPÓSITO PARTICULAR. Véase la *
*Licencia Pública General de GNU para más detalles. *
* *
************************************************** *************************/

#include <stdio.h>
#include <conio.h>
#include <math.h>
int a, b, c, d;
int num1, num2, num3, comp;
int conta1, conta2;
int r1,r2,r3;
char opcion;
void main(void)
{
do
{
comp = 0;
clrscr();
printf("Escribe los valores de a,b,c en la ecuacion ax²+bx+c\n");
scanf("%i",&num1);
gotoxy(4,2);
printf("x2+");
scanf("%i",&num2);
gotoxy(10,2);
printf("x+");
scanf("%i",&num3);
conta1 = (0-1)*abs(num1);
conta2 = (0-1)*abs(num3);
a=(0-1)*conta1;
b=(0-1)*conta2;
c=(0-1)*conta1;
d=(0-1)*conta2;
while (a>=conta1 && comp!=1)
{
b=(0-1)*conta2;
while (b>=conta2 && comp!=1)
{
c=(0-1)*conta1;
while (c>=conta1 && comp!=1)
{
d=(0-1)*conta2;
while (d>=conta2 && comp!=1)
{
clrscr();
r1 = a*c;
r2 = (a*d) + (b*c);
r3 = b*d;
printf("(%dx+%d)(%dx+%d)",a,b,c,d);
if (r1 == num1 && r2 == num2 && r3 == num3)comp = 1;
d--;
}
c--;
}
b--;
}
a--;
}
if (comp != 1) printf("\nNo se puede factorizar la ecuacion");
printf("\nDeseas hacer otra ecuacion?[s/n]");
opcion = getch();
}while (opcion == 's' || opcion == 'S');
}

<PICCOLO>
01-11-2002, 23:37
pones #include 3 veces y en cambio no incluyes nada... deberias incluir stdio al menos (iostream.h si estas en c++), ya que usas sentencias de entrada/salida en el codigo, por lo demas, creo que está bien

CrAcKzMe
02-11-2002, 00:55
mola tio!

<PICCOLO>
02-11-2002, 02:47
la variable que declaras con el nombre de conta3 no la usas para nada, asi que se podria suprimir

CrAcKzMe
02-11-2002, 03:42
tb xD

Giskard
02-11-2002, 16:48
Tienes razón en lo de conta3, es que al principio si la usé, pero después de cambiar el código para optimizar el programa dejé de usarla y se me olvidó quitarla de las declaraciones,

En cuanto a los tres includes ahí van las librerías "conio.h" "stdio.h" e "math.h", no se ven porque en el foro si pones llos signos 'menor que' y 'mayor que' los toma como comentarios y no aparecen en el mensaje.
saludos

CrAcKzMe
02-11-2002, 18:04
a mi me mola. No puedo compilarlo pq al switch se le va la oya y no tengo inet en mi pc con redhat, xDD pero ya lo haré. Mola tio, queda asin la cosa pues:


/ **************************************************
*************************
factoriza.cpp - Este programa factoriza
ecuaciones de segundo grado,
los pasa de la forma ax² + bx + c
a la forma (ax+b)(cx+d)
-------------------
Autor: Othoniel García
[email protected]
**************************************************
*************************/

/ **************************************************
*************************
*Este programa es software libre. Puede redistribuirlo y/o modificarlo *
*bajo los términos de la Licencia Pública General de GNU según es *
*publicada por la Free Software Foundation, bien de la versión 2 de dicha *
*Licencia o bien (según su elección) de cualquier versión posterior. *
* *
*Este programa se distribuye con la esperanza de que sea útil, pero SIN *
*NINGÚN TIPO DE GARANTÍA, incluso sin la garantía MERCANTIL implícita o *
*sin garantizar la CONVENIENCIA PARA UN PROPÓSITO PARTICULAR. Véase la *
*Licencia Pública General de GNU para más detalles. *
* *
**************************************************
*************************/

#include stdio.h
#include conio.h
#include math.h
int a, b, c, d;
int num1, num2, num3, comp;
int conta1, conta2;
int r1,r2,r3;
char opcion;
void main(void)
{
do
{
comp = 0;
clrscr();
printf("Escribe los valores de a,b,c en la ecuacion ax²+bx+c\n");
scanf("%i",&num1);
gotoxy(4,2);
printf("x2+");
scanf("%i",&num2);
gotoxy(10,2);
printf("x+");
scanf("%i",&num3);
conta1 = (0-1)*abs(num1);
conta2 = (0-1)*abs(num3);
a=(0-1)*conta1;
b=(0-1)*conta2;
c=(0-1)*conta1;
d=(0-1)*conta2;
while (a>=conta1 && comp!=1)
{
b=(0-1)*conta2;
while (b>=conta2 && comp!=1)
{
c=(0-1)*conta1;
while (c>=conta1 && comp!=1)
{
d=(0-1)*conta2;
while (d>=conta2 && comp!=1)
{
clrscr();
r1 = a*c;
r2 = (a*d) + (b*c);
r3 = b*d;
printf("(%dx+%d)(%dx+%d)",a,b,c,d);
if (r1 == num1 && r2 == num2 && r3 == num3)comp = 1;
d--;
}
c--;
}
b--;
}
a--;
}
if (comp != 1) printf("\nNo se puede factorizar la ecuacion");
printf("\nDeseas hacer otra ecuacion?[s/n]");
opcion = getch();
}while (opcion == 's' || opcion == 'S');
}

Giskard
02-11-2002, 18:16
El compilador en el que fue probado este programa es el borland c++ 5.01.
Por el momento estoy trabajando con uno que te da los valores de x1 y x2 en las ecuaciones de segundo grado (ax² + bx + c = 0), sólo faltan algunos detalles.
saludos