P_54_E31-Operaciones+con+un+polinomio

=__**Operaciones con un polinomio**__=

El programa deberá presentar un menú en pantalla que facilite las siguientes opciones con polinomios de segundo grado:

1.- Leer un polinomio 2.- Escribir un polinomio en su forma habitual 3.- Evaluar un polinomio en un punto 4.- Calcular el polinomio derivado 0.- Fin

__//**Se deberán utilizar los siguientes subprogramas:**//__


 * LEER** mediante este subprograma se introducen los números enteros que representan los coeficientes del polinomio.


 * ESCRIBIR** es un subprograma que permite la escritura de un polinomio en la forma: Ax^2 + Bx + C
 * Ejemplos válidos: ||  || 5x^2 + 3x + 5 ||   ||   ||   || 5x^2 - 3x + 5 ||   ||   ||   || 5x^2 - 5 ||
 * Ejemplos no válidos: ||  || 5x^2 + - 3x + 5 ||   ||   ||   || 5x^2 + 0x + 5 ||   ||   ||   || 0x^2 +3 x - 5 ||


 * EVALUAR** es un subprograma que retorna el valor de un polinomio para un número real que es introducido como parámetro.


 * DERIVAR** es un subprograma que calcula la derivada de un polinomio.


 * NOTA**: No está permitida la utilización de variables globales en los subprogramas

code format="pascal" PROGRAM OperacionesConPolinomios ; USES Crt ; FUNCTION fncLeerOpcion : Char ; VAR cOpcion : Char ; BEGIN Writeln (' ============ MENU DE OPCIONES ==========') ; WriteLn ; WriteLn (' 1.- Leer un polinomio') ; WriteLn (' 2.- Escribir un polinomio') ; WriteLn (' 3.- Evaluar el polinomio en un punto') ; WriteLn (' 4.- Calcular la derivada del polinomio') ; WriteLn (' 0.- Terminar') ; WriteLn ;

REPEAT Write (' Pulsa el numero de la opcion: ') ; ReadLn (cOpcion) ; UNTIL ('0' <= cOpcion) AND (cOpcion <= '4') ; { Otra forma --- Write (' Pulsa el numero de la opcion: ') ; REPEAT cOpcion := Readkey ; UNTIL ('0' <= cOpcion) AND (cOpcion <= '4') ; WriteLn (cOpcion) ; ---}    WriteLn ;

fncLeerOpcion := cOpcion END ;

PROCEDURE Leer (VAR rA, rB, rC : Real) ; BEGIN Write ('Introduce coeficiente de x^2: ') ; ReadLn (rA) ; Write (' coeficiente de x: ') ; ReadLn (rB) ; Write (' termino independiente: ') ; ReadLn (rC) ; END ;

FUNCTION fnrEvaluar (rA, rB, rC, rX : Real) : Real ; BEGIN fnrEvaluar := rA * rX * rX + rB * rX + rC END ;

PROCEDURE Derivada (VAR rA, rB, rC : Real) ; BEGIN rC := rB ; rB := 2 * rA ; rA := 0 END ;

PROCEDURE Escribir (rA, rB, rC : Real) ; BEGIN IF rA <> 0 THEN Write (rA:0:2, ' x^2 ') ;

IF rB <> 0 THEN IF rB > 0 THEN Write (' + ' rB:0:2, ' x ') ; ELSE Write (' - ', Abs(rB):0:2, ' x ') ;

IF rC <> 0 THEN IF rC > 0 THEN Write (' + ' rC:0:2) ELSE Write (' - ', Abs(rC):0:2) ; Writeln ; END ;

{--- Variables del Programa Principal -} VAR rA, rB, rC, rX : Real ; cOpcion, cEspera : Char ;

BEGIN { Programa Principal ---} WriteLn ('Programa que efectua operaciones con',            ' polinomios de 2º grado') ; Leer (rA, rB, rC) ;

REPEAT cOpcion := fncLeerOpcion ; CASE cOpcion OF        '1' : Leer (rA, rB, rC) ; '2' : BEGIN Write ('El polinomio es: ') ; Escribir (rA, rB, rC) ; END ; '3' : BEGIN Write ('Punto: ') ; ReadLn (rX) ; Writeln ; WriteLn ('En ese punto el polinomio vale: ', fnrEvaluar (rA, rB, rC, rX):0:2) ; END ; '4' : BEGIN Derivada (rA, rB, rC) ; Writeln ('Ahora el polinomio se ha convertido en su derivada') ; Escribir( rA, rB, rC) ; END ; END ; { CASE }

cEspera := Readkey ;

UNTIL cOpcion = '0' ;

END. (* Fin de SUBPR_31.PAS *) code