[ Foro de Pascal ]

Runtime error 207 at $08048247

28-Sep-2007 19:16
Angel Bravo
15 Respuestas

He llegado a la sección de funciones y procedimientos, y aunque reconozco no estar seguro de entender completamente el concepto y uso de los párametros, quise intentar realizar un programa que permitiese calcular ecuaciones de segundo grado, algo en principio simple pero que me permitiese entenderlo mejor así:

program grado;
var
a, b, c: real;

procedure calculo (var a, b, c:real);
var
x1:real;

begin
if a = 0
then
writeln ( 'la ecuación tiene como soluciones: x1=x2=0')
else
X1:=(-b + sqrt(sqr(b) - 4*a*c)) / (2*a);
(*X2:=(-b+sqrt(sqr (b) - 4*a*c))/(2*a);*)
writeln ( 'la solucion es', x1 );
end;

begin
writeln ('introduce a ');
readln (a);
writeln ('introduce b ');
readln (b);
writeln ('introduce c ');
readln (c);
writeln;
calculo (a, b, c);
end.

evidentemente, el programa esta a medio hacer (inhabilité por ejemplo, una de las dos posibles soluciones de la ecuación) pero quise compilarlo a ver qué pasaba, compila correctamente (gnu/linux, IDE geany, y Free Pascal Compiler version 2.0.4 [2007/02/02] for i386) pero a la hora de dar cualquier valor a los números, la pantalla me escupe:

Runtime error 207 at $08048247
$08048247
$0804809F

Probé otro código (no es mío, creo que se nota :p) para hacer lo mismo pero sin procedimientos ni nada ( a lo simple), pero me sigue dando el mismo error, el código usado es:

PROGRAM EJER18B;
USES CRT;
VAR a,b,c:REAL;
VAR resultado1,resultado2:REAL;

BEGIN

{Calcula ecuaciones de segundo grado}

ClrScr;

WRITE ('ESTE PROGRAMA SIRVE PARA CALCULAR ECUACIONES ');
WRITELN ('DE SEGUNDO GRADO');
WRITELN (' ');
WRITELN ('Introduzca: a, b y c: ');
WRITELN (' ');
READLN (a);
READLN (b);
READLN (c);

resultado1:=(-b + sqrt(sqr(b) - 4*a*c)) / (2*a);
resultado2:=(-b - sqrt(sqr(b) - 4*a*c)) / (2*a);
WRITELN ('RESULTADO DE LA EXPRESION: ');
WRITE ('VALOR 1: '); WRITELN (resultado1:5:2);
WRITE ('VALOR 2; '); WRITE (resultado2:5:2);
END.

Ni logro encontrar los errores en mi código (seguramente sean los parametros o las variables) ni entiendo el origen de ese error. Gracias por adelantado.

29-Sep-2007 11:08
Nacho Cabanes (+30)

Ese programa tiene cosas mejorables... pero funciona. Quizá el problema sea simplemente que estés usando un compilador antiguo, como Turbo Pascal, o que tu compilador esté mal instalado.

Yo lo he probado con Free Pascal 2.0.4, y estos son mis resultados:

introduce a
1
introduce b
0
introduce c
-1
la solucion es 1.000000000000000E+000

En cuanto a cosas mejorables:
  • Apariencia, como puedes ver en el ejemplo anterior: en vez de " writeln ( 'la solucion es', x1 );" usa " writeln ( 'la solucion es', x1:5:2 );" para que no escriba el resultado en notación científica, sino con dos decimales.
  • Algún error lógico: "writeln ( 'la ecuación tiene como soluciones: x1=x2=0')" el hecho de que "a" valga cero quiere decir que la solución es única, pero no que sea 0. La solución será -c/b en ese caso
  • Algún error de estructuración: "else X1:= [...] X2:=[...]
    writeln [...]" Si quieres hacer 3 cosas en un "else", deberían ir entre "begin" y "end"
  • Elegancia: eso de que llames a una función desde el programa principal, no reciba datos sino que tome variables globales, no devuelva resultados sino que escriba ella misma... es muy mejorable ;-)
Poco a poco. De momento comprueba que consigues hacer funcionar este fuente con Free Pascal y entonces prueba a ir solucionando esos problemas.


30-Sep-2007 02:52
Angel Bravo

En lo que respecta a la "Apariencia" y al "error lógico", era consciente de ello (ya le indiqué que era un código a medio hacer, obviando hasta las cuestiones matematicas lógicas como que evidentemente, la solución única no es 0) el "jaleo" viene dado por los parámetros del procedimiento/función. O más bien, por no entenderlo bien confuso. La idea básica era establecer un procedimiento/funcion propia para cada posible situación (que falte bx, c, o que esten todas := x*x+bx+c=0) y que en consecuencia, cada uno aplique la fórmula correspondiente dándo el resultado al programa principal. Si partimos de la base de que:
  • Existe un párametro formal: situado a la cabecera del procedimiento/función donde le llega la información, indicado mediante el identificador y el tipo asociado a cada uno separado por : y terminado por ; indicando VAR si queremos devolver variables y si no, se declara como valor.
  • Existe un párametro actual: situado en la llamada al procedimiento/función que le entregan la información al mismo.
  • El número de párametros formales debe ser igual al número de parámetros actuales.
  • Ambos deben ser compatibles en tipo.
Bueno, esas son las conclusiones (supongo que no demasiado erróneas) a las que he podido llegar y éste el nuevo código (creo que mejor hecho, pero aún quiero incluirle más cosas por lo que no lo consideremos terminado guiño)

program grado;
var
num1, num2, num3: real;

function calculo (a, b, c:real): real;
var
X1, X2:real;

begin
if a = 0
then
begin
writeln ( 'la solución es única');
writeln ('x = ', -b/(2*a));
end
else
begin
X1:=(-b+sqrt(sqr (b) - 4*a*c))/(2*a);
X2:=(-b-sqrt(sqr (b) - 4*a*c))/(2*a);
writeln (x1:5:2, x2:5:2);
end
end;

begin
writeln ('introduce a ');
readln (num1);
writeln ('introduce b ');
readln (num2);
writeln ('introduce c ');
readln (num3);
writeln;
writeln (' la solución es ', calculo (num1, num2, num3))
end.

Este código compila y parece ser que funciona lengua fuera aunque el compilador me lanza el aviso "warning: function result does not seem to be set"
Por cierto...¿Geany o Anjuta? Gracias.
01-Oct-2007 01:59
Nacho Cabanes (+30)

Ya va estando mejor. ;-)

Pero para asegurarte de que funciona, pruébalo con distintos valores. Por ejemplo, si pones a = 0 falla, por esto:

if a = 0
then
begin
writeln ( 'la solución es única');
writeln ('x = ', -b/(2*a));

(No deberías dividir entre A si sabes que vale cero, debería ser C; si lo pruebas con varios valores, verás que falla).


El warning se debe a que dices que la función devuelve un valor real... y no es así, te limitas a mostrar resultados en pantalla, pero no devuelves nada. Hablando estrictamente, no estás creando una función (function) sino un procedimiento (procedure).

Lo que se considera más correcto es que tu función devuelva un valor (o dos, pasados como parámetros por referencia) pero no escriba en pantalla, porque si no, esa función no la podrías aplicar cuando crearas una versión de tu programa que trabaje en Windows bajo un entorno visual como Delphi o Lazarus, o si vuelcas resultados a ficheros, o los envías a otro equipo a través de una red, etc.

Por eso, puedes tener un warning al final de la función, que no devuelve ningún valor, pero también en el "writeln" del final del programa, porque llama a la función "calculo"... que no tiene ningún valor.


01-Oct-2007 02:04
Nacho Cabanes (+30)

En cuanto a si Anjuta o Geany, en primer lugar, quizá esta pregunta debería estar en el foro de C, que es el lenguaje en que se usan más habitualmente (usarlos para compilar en Pascal es "un poco menos inmediato"). En segundo lugar, si preguntas es posiblemente porque ya sabes mi opinión ;-)

Aun así, te resumo:

  • Anjuta 2 no me gustó. Demasiadas dependencias y no iba fino.
  • Anjuta 1.x va muy bien.
  • Geany si tu distribución de Linux no incluye Anjuta 1 sino Anjuta 2, o si quieres tener (también) un editor rápido y ligero.

Más detalles en

http://nachocabanes.blogspot.com/2006/12/anjuta-ha-muerto-viva-geany.html

02-Oct-2007 01:15
Angel Bravo

Que gustazo cuando el código mejora y encima compila sin errores ni warnings....aprobación
Rehice casi todo por completo, aunque tengo dos cuestiones con las que no termino de aclararme, primero aqui esta el código:

program grado;
var
num1, num2, num3: real;

function calculo1 (a, b, c:real): real; (*este es el cálculo completo*)
var
x1:real;
disc: real; (* creamos una variable para aislar parte del cálculo*)
begin
disc := sqr (b) - 4*a*c; (* asignamos la variable al discriminante*)
if disc > 0
then
begin
x1:=(-b+sqrt(sqr (b) - 4*a*c))/(2*a);
(*x2:=(-b-sqrt(sqr (b) - 4*a*c))/(2*a);*)
calculo1:= x1;
end;
if disc = 0
then
begin
X1:=-b/(2*a);
(*x2:=-b/(2*a);*)
calculo1:=x1;
end;
if disc < 0
then
begin
x1:=-b/(2*a);
(*x2:=SQRT(-discriminant)/(2*a)*)
calculo1:=x1;
end;
end;

function calculo2 (a, c:real): real; (*este es el calculo sin "bx" en la ecuacion*)
var
x:real;
disc:real;
begin
disc:=(-c/a);
if disc >= 0
then
x:=sqrt(-c/a);
calculo2:=x;
end;

function calculo3 (a, b:real): real; (*este es el calculo sin "c" en la ecuacion*)
var
x:real;

begin
x:=-b/a;
calculo3:=x;
end;

begin
writeln ('introduce a ');
readln (num1);
writeln ('introduce b ');
readln (num2);
writeln ('introduce c ');
readln (num3);
writeln;
if (num1 = 0)
then
writeln ( 'Es una ecuacion de primer grado ');
if (num2 =0)
then
writeln ('la solución es +- ', calculo2 (num1, num3):5:2);
if (num3 = 0)
then
writeln ('Una solución vale 0, la otra vale ', calculo3 (num1, num2):5:2);
if (num1 <>0) and (num2 <>0) and (num3<>0)
then
writeln ('la solucion es ', calculo1 (num1, num2, num3):5:2)
end.



Compila sin errores, funciona, y encima será GPL lengua fuera pero como le decía, hay dos cosas que no me gustan nada:
Lo primero es la cuestión de las segundas soluciones, marcadas como comentarios y llamadas "x2" en la función calculo1, podria solucionarse simplemente haciendo otra función igual pero que devolviera ese valor y llamarla después como a la otra para imprimir en pantalla el resultado, pero imagino que debe haber una forma más elegante de hacerlo, intenté asignar las soluciones como parámetros de referencia en un procedimiento, pero no encontraba la forma ni de asignarlos, ni de cómo llamar a ese procedimiento para que me diera las soluciones.
Lo segundo, ocurre a veces, y es que cuando falla el cálculo en alguna función (por ejemplo que la función acabe calculando buscando una raiz cuadrada a un número negativo) la funcion marca error y/o a continuación el programa escribe el writeln ('la solucion es...') correspondiente. Pensé en añadir a las sentencias condicionales que ordenan cada writeln, una nueva condición que tengan eso en cuenta, pero después de intentar varias opciones, ninguna funcionaba correctamente, quedando totalmente descartado el escribir en pantalla dentro de la función.
Siento si pregunto demasiado, pero le he cogido gusto a programar en pascal, o más bien a aprender a programar en pascal (échele la culpa a mi carrera si quiere, muchos lo hacemos risa)

No tenía ni idea de su opinión sobre los IDE's en aquel blog, simplemente synaptic solo me daba a elegir entre geany o anjuta como un posible IDE para programar en pascal, pero ha sido interesante echarle un vistazo, personalmente seguire con Anjuta (es la versión 1.2.4 en ubuntu 7.04)

03-Oct-2007 02:36
Angel Bravo

acabo de darme cuenta de lo que podría ser un fallo en el código que había pasado por alto, evidentemente la resolución del discriminante no tiene la misma solución cuando es menor que 0 que cuando es igual a 0, pero sigo teniendo los mismos problemas que antes, ni sabría como asignarle a esa condición el asumir que son dos soluciones imaginarias e imprimirlo en pantalla sin poner un writeln('x = ', -b/(2*a), ' +- ', sqrt(-disc)/(2*a)) dentro de la función, cosa que además, no devolveria ningún valor...
06-Oct-2007 00:57
Nacho Cabanes (+30)

Yo usaría varias funciones:

  • Una función "discriminante", que diera como resultado el valor de b*b - 4*a*c. Desde el cuerpo del programa compruebas el valor del discriminante. Si es negativo, no hay solución (o la solución es un número complejo, no un número real, si queremos hablar con más propiedad). Si es 0, la solución es única. Si es >0 hay dos soluciones.
  • Una función "solución1" que calcule el valor de (-b + raiz (discriminante)) / (2*a)
  • Una función "solución2" que calcule el valor de (-b - raiz (discriminante)) / (2*a)

Por supuesto, sólo llamas a "solución1" y a "solución2" si merece la pena, no lo haces cuando el discriminante es negativo.

También podrías devolver los dos valores en una única función, usando parámetros por referencia, pero yo creo que es menos legible, y quizá no merezca la pena aunque sea algo más corto:

procedure solucion(a, b, c: real; var soluc1: real; var soluc2: real);
...



06-Oct-2007 03:47
Angel Bravo

Me he puesto a arreglarlo en cuanto he visto la respuesta risa, el código es:

program ecuacion;
var
num1, num2, num3: real;

function disc (a, b, c:real): real; (* cálculo del discriminante*)
begin
disc:=((b*b) - (4*a*c));
end;

function calculo1a (a, b, disc:real): real; (*cálculo de una solución de una ecuación completa*)
begin
begin
calculo1a:=(-b+sqrt(disc)/(2*a));
end;
end;

function calculo1b (a, b, disc:real): real; (*cálculo de una solución de una ecuación completa*)
begin
begin
calculo1b:=(-b-sqrt(disc))/(2*a);
end;
end;

function calculo2 (a, c:real): real; (*este es el calculo sin "bx" en la ecuacion*)
begin
calculo2:=sqrt(-c/a);
end;

function calculo3 (a, b:real): real; (*este es el calculo sin "c" en la ecuacion*)
begin
calculo3:=-b/a;
end;

begin
writeln ('introduce a ');
readln (num1);
writeln ('introduce b ');
readln (num2);
writeln ('introduce c ');
readln (num3);
writeln;
if (num1 = 0) then
writeln ( 'Es una ecuacion de primer grado ')
else if (num2 =0) then
writeln ('la solución es +- ', calculo2 (num1, num3):5:2)
else if (num3 = 0) then
writeln ('Una solución vale 0, la otra vale ', calculo3 (num1, num2):5:2)
else if (disc > 0) then
writeln ('la solucion es.... ')
else
writeln('la solución es un número complejo, no un número real');
end.


un par de cosas al respecto:
en el "else if (disc > 0) then" el compilador me dice "wrong number of parameters specified" ¿no puedo asignar el resultado de una función como una expresión en una instrucción? entonces tampoco podría escribir "writeln ('la solución es ', calculo1a (a, b, disc):5:2); para imprimir el resultado ya que disc no seria una variable...otra cosa, es igual, e incluso más claro y eficiente escribir:

function disc (a, b, c:real): real;
begin
disc:=((b*b) - (4*a*c));
end;

en lugar de:

function disc (a, b, c:real): real; )
var x:real;
begin
x:= ((b*b) - (4*a*c));
disc:=x;
end;
o me equivoco?

09-Oct-2007 21:15
Nacho Cabanes (+30)

El único problema está en que no sería

else if (disc > 0) ...

sino

else if (disc(num1, num2, num3) > 0) ...

(es decir, falta indicar los parámetros cuando llamas a la función).

Y en cuanto a:

function disc (a, b, c:real): real;
begin
disc:=((b*b) - (4*a*c));
end;

Sí, yo considero más legible esa primera opción, en la que devuelves el valor directamente, sin usar variables auxiliares.


10-Oct-2007 15:57
Angel Bravo

Bueno, creo que con esto ya podemos dar el programa por terminado...aunque hay algo que ocurre y no sé por qué...he eliminado la variable (disc) dentro de algunas funciones, no acierto a adivinar el motivo, pero por alguna razón, esta función:

function calculo1a (a, b, c:real): real; (*cálculo de una solución de una ecuación completa*)
begin
begin
calculo1a:=(-b+sqrt((b*b) - 4*a*c))/2*a;
end;
end;

da un resultado correcto, mientras que si la función es así:

function calculo1a (a, b, disc:real): real; (*cálculo de una solución de una ecuación completa*)
begin
begin
calculo1a:=(-b+sqrt(disc))/2*a;
end;
end;

la función da resultados erróneos (siendo disc:=(b*b) - 4*a*c), de cualquier forma usando la primera función parece que no da errores en los cálculos, el código lo pongo aquí por si le interesa a alguien:


program seggrado;
var
num1, num2, num3: real;

function disc (a, b, c:real): real; (* cálculo del discriminante*)
begin
disc:=(b*b) - 4*a*c;
end;

function calculo1a (a, b, c:real): real; (*cálculo de una solución de una ecuación completa*)
begin
begin
calculo1a:=(-b+sqrt((b*b) - 4*a*c))/2*a;
end;
end;

function calculo1b (a, b, c:real): real; (*cálculo de una solución de una ecuación completa*)
begin
begin
calculo1b:=(-b-sqrt((b*b) - 4*a*c))/2*a;
end;
end;

function calculo2 (a, c:real): real; (*este es el calculo sin "bx" en la ecuacion*)
begin
calculo2:=sqrt(-c/a);
end;

function calculo3 (a, b:real): real; (*este es el calculo sin "c" en la ecuacion*)
begin
calculo3:=-b/a;
end;

begin
writeln ('introduce a ');
readln (num1);
writeln ('introduce b ');
readln (num2);
writeln ('introduce c ');
readln (num3);
writeln;
if (num1 = 0) then
writeln ( 'Es una ecuacion de primer grado ')
else if (num2 =0) then
writeln ('la solución es +- ', calculo2 (num1, num3):5:2)
else if (num3 = 0) then
writeln ('Una solución vale 0, la otra vale ', calculo3 (num1, num2):5:2)
else if (disc(num1, num2, num3) >= 0) then
writeln ('la solución es ', calculo1a (num1, num2, num3):5:2, calculo1b (num1, num2, num3):5:2)
else writeln('la solución es un número complejo, no un número real');

end.


P.D. Me he dado cuenta de que acabo de crear el debate más largo del curso, primer paso para dominar el mundo completado. guiño

11-Oct-2007 03:27
Nacho Cabanes (+30)

Todavía no está terminada: decías...

Bueno, creo que con esto ya podemos dar el programa por terminado...aunque hay algo que ocurre y no sé por qué...he eliminado la variable (disc) dentro de algunas funciones, no acierto a adivinar el motivo, pero por alguna razón, esta función:

function calculo1a (a, b, c:real): real; (*cálculo de una solución de una ecuación completa*)
begin
begin
calculo1a:=(-b+sqrt((b*b) - 4*a*c))/2*a;
end;
end;

da un resultado correcto, mientras que si la función es así:

function calculo1a (a, b, disc:real): real; (*cálculo de una solución de una ecuación completa*)
begin
begin
calculo1a:=(-b+sqrt(disc))/2*a;

Casi con toda seguridad (99,9%) es uno de estos dos problemas:
  • O bien "disc" es una variable global y la estás usando antes de que tenga un valor (fallo frecuente), y en ese caso contiene basura.
  • O bien "disc" es una función y la estás llamando incorrectamente (pero entonces deberías tener otro warning "Wrong number of parameters"), por ejemplo usando
calculo1a:=(-b+sqrt(disc))/2*a;

en vez de

calculo1a:=(-b+sqrt( disc(a,b,c) )/2*a;

De modo que no sabe a partir de qué a,b y c calcular su valor, y también se obtiene basura.

Por cierto, esos nombres de "calculo1", "calculo2", etc... no son demasiado intuitivos... ;-)


15-Oct-2007 21:30
Angel Bravo

Al compilar no recibo ningún warning, nada de "Wrong number of parameters" por lo que habría que descartar esa opción pero si el valor que devuelve la función "disc" es una variable global, ésta no se usa hasta que no se recogen los valores num1/2/3 y ya se "decide" que hacer con ello con las sentencias "if" encadenadas......no? confuso
en lo que respecta a los cálculos y sus nombres (calculo1, calculo2) me parecieron lo bastante intuitivos, sobretodo al incluir su uso en los comentarios ¿ello no deberia bastar? será que peco de falta de originalidad, pero en su momento, parecia una buena idea...

04-Jul-2011 13:42
matias norry

HOLA NACHO, YO NO TENGO NINGUNA DUDA, SOLO TE QUERIA MOSTRAR MI PROGRAMA YA TERMINADO PARA CALCULAR CUADRATICAS, FUNCIONA BIEN (CREO), LO MUESTRO PARA QUE VEAN COMO LO RESOLVI YO, UNA COSA, YO NO USE FUNCIONES Y PROCEDIMIENTOS...CREO Q ESTA BIEN Y SI SE PUDE MEJORAR ALGO ME GUSTARIA SABERLO...BUENO GRACIAS POR MIRAR MI PROGRAMA...SALUDOS!!!

PROGRAM cadratica;
USES CRT;
VAR

   A,B,C,E,X1,X2:REAL;
BEGIN

    Clrscr;
           textcolor(2);GotoXY (10,2);WRITELN('*********************************************************');
           GotoXY (10,3);WRITELN('****************    RAIZ CUADRATICA   *******************');
           GotoXY (10,4);WRITELN('*********************************************************');
           WRITELN;
           GOTOXY (10,6);WRITELN('INGRESE UN VALOR A LA VEZ Y PRESIONE ENTER: ');
           TEXTCOLOR(6);
           GOTOXY (35,9);WRITELN ('  *');
           GOTOXY (35,10);WRITELN ('  *');
           GOTOXY (35,11);WRITELN ('  *');
           GOTOXY (35,12);WRITELN ('  *');
           GOTOXY (35,13);WRITELN ('* * *');
           GOTOXY (35,14);WRITELN ('  *');
           textcolor(3);GotoXY (10,17);WRITE('INGRESE EL VALOR DE A ---> ');      READ(A);
           WRITELN;
           IF A<>0 THEN
           BEGIN
           textcolor(3);GotoXY (10,19);WRITE('INGRESE EL VALOR DE B ---> ');   READ(B);
           WRITELN;
           textcolor(3);GotoXY (10,21);WRITE('INGRESE EL VALOR DE C ---> ');   READ(C);

           E:=((B*B)- (4*A*C));
           textcolor(4);GotoXY (10,23);WRITELN('EL RESULTADO DE LA RAIZ ES: ',E:2:1);
           WRITELN;

           IF E >=0 THEN
                   BEGIN
                   X1:= (-(B)+(SQRT (E)))/(2*A);
                   X2:= (-(B)-(SQRT (E)))/(2*A);
                   textcolor(6);GotoXY (10,25);WRITELN('******************************************');
                   GotoXY (10,26);WRITELN('EL VALOR DE X1 ES:-----------> X1: ',X1:2:2);

                   WRITELN;
                   GotoXY (10,27);WRITELN('EL VALOR DE X2 ES:-----------> X2: ',X2:2:2);
                   GotoXY (10,28);WRITELN('******************************************');
                   WRITELN;
                   textcolor(4);GotoXY (10,30);WRITELN('******** PRESIONE ENTER PARA SALIR *******');
                   END
                   ELSE

                       IF E<0 THEN
                       BEGIN
                       textcolor(6);GotoXY (10,25);WRITELN('*** NO EXISTE LA RAIZ CUADRATICA!!! *** ');

                       textcolor(4);GotoXY (10,27);WRITELN('*** PRESIONE ENTER PARA SALIR ***');
                       END;

           END;
           IF A=0 THEN

                 BEGIN
                 GOTOXY(10,19);TEXTCOLOR(6);WRITELN('**********************************************************');
                 GOTOXY(10,20);WRITELN('********* "A" ES IGUAL A: "0" -----> ERROR! **************');
                 GOTOXY(10,21);WRITELN('**********************************************************');
                 WRITELN;
                 GOTOXY(10,23);TEXTCOLOR(4);WRITELN('************* PRESIONE ENTER PARA SALIR! *****************');
                 END;



           READKEY;
END.


04-Jul-2011 19:32
Nacho Cabanes (+30)

Has rescatado un tema de hace 4 años... ;-)

Sí, el fuente está bien. Apenas dos posibles mejoras:

- Falta (aunque no es obligatorio) separar el caso en que el discriminante (que tú has llamado E) vale 0, porque en ese caso la solución es única (X1 y X2 tienen el mismo valor).

- A mí personalmente no me gusta que esté todo el fuente en mayúsculas. Cansa más la vista y resulta menos legible. Yo prefiero "TextColor" en vez de "TEXTCOLOR".

Pero ya ves que ninguna de las cosas es importante.


05-Jul-2011 01:24
matias norry

gracias nacho, si, tenes razon, con mayusculas cansa mas la vista, en los proximos programas lo voy a tener en cuenta, y con respecto a si el valor del discriminante "E" E=0, si, tienes toda la razon porque la solucion es unica y me esta tirando x1 y x2 con los mismos valores, tengo que corregir eso y poner un mensaje para cuando la solucion es unica....gracias profe, dentro de un mes retomo mis clases de programacion y voy a estar en contacto contigo para que me asesores con algunos programas...desde ya muchas gracias y miles de exitos!!!






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)