(*---------------------------------------------------------------------------
   :Program.    Kurve
   :Author.     Jörg Wesemann
   :Address.    Auf der Heide 10, 2807 Achim - Baden
   :Phone.      (0)4202 / 70658
   :Shortcut.   [jwe]
   :Version.    2.94
   :Date.       23.03.89
   :Copyright.  PD
   :Language.   Modula-II
   :Translator. M2Amiga
   :Imports.    JWELib: Parser
   :Update.     none.
   :Contents.   Trifft Aussagen zum Monotonieverhalten in einem Intervall
   :Remark.     none.
---------------------------------------------------------------------------*)


IMPLEMENTATION MODULE monotonie;

FROM SYSTEM 		IMPORT 	FFP,ADR;
FROM FFPInOut 		IMPORT 	WriteReal, ReadReal;
FROM InOut 		IMPORT 	Write,WriteString,WriteLn,WriteCard,OpenOutput,
				CloseOutput;
FROM startupproc 	IMPORT 	CLS,crlf,cursorr,fn,solve,m,n,eps,center,string,
				nullbuffer,dateiabfrage,fragedatei,wptr;
FROM intervall 		IMPORT 	kleinintervall;
FROM JWELib 		IMPORT 	parse;    
FROM Strings 		IMPORT 	Length;
FROM menu 		IMPORT 	wartemenu;
FROM Intuition		IMPORT	WindowToFront;


PROCEDURE monotonie;

  VAR
    x,dx,xmin,xmax 	: FFP;
    success	 	: BOOLEAN;
    art		 	: CARDINAL;
  
BEGIN
  nullbuffer[2]:= "0.2";
  kleinintervall(nullbuffer,ADR("MONOTONIE - Intervall"));
  xmin:= parse(nullbuffer[1],0.0);
  dx:=   parse(nullbuffer[2],0.0);
  xmax:= parse(nullbuffer[3],0.0);
  art:=  CARDINAL(parse(nullbuffer[4],0.0));
  WindowToFront(wptr);
  Write(CLS);
  IF dateiabfrage THEN
    fragedatei();
  END;  
  center("Monotonieüberprüfung"); WriteLn;
  center("--------------------"); crlf(2);
  center("von"); crlf(2);
  cursorr(20+(31-Length(string)) DIV 2 );
  WriteString("f(x) = ");
  WriteString(string); crlf(3);
  center("Die Funktion ist im Bereich"); crlf(3); cursorr(22);
  WriteString("["); WriteReal(xmin,m,n); WriteString(",");
  x:= solve(xmin,xmax,dx,1,art,success);
  IF success THEN
    REPEAT
      WriteReal(x,m,n); WriteString("  ] monoton ");
      IF fn(x,2) < -eps THEN
        WriteString("steigend");
      ELSIF fn(x,2) > eps THEN				(* IF 2		*)
        WriteString("fallend");
      END;						(* IF 2		*)
      WriteLn; cursorr(22);
      WriteString("["); WriteReal(x,m,n); WriteString(",");
      xmin:= x + dx;
      x:= solve(xmin,xmax,dx,1,art,success);
    UNTIL NOT success OR (x>xmax);			(* REPEAT 1	*)
  END;							(* IF 1		*)
  WriteReal(xmax,m,n); WriteString("  ] monoton ");
  IF fn(x,1) <= -eps THEN
    WriteString("fallend");
  ELSIF fn(x,1) >=eps THEN
    WriteString("steigend");
  ELSE
    WriteString("!!  A C H T U N G  !!"); WriteLn; cursorr(22);
    WriteString(" -eps < f'(x) < eps "); WriteLn; cursorr(22);
    WriteString("Bitte Grenzen anders wählen");
  END;
  WriteLn;
  CloseOutput;
  crlf(3); cursorr(22);
  WriteString("Bitte 'RETURN' drücken für MENU ");
  wartemenu;

END monotonie; 


END monotonie.
