| |
|
|
p.specht
| Wer aus der Schule noch die Schrecken der Polynome in Erinnerung hat, sollte sich in Gedanken beim englischen Schulleiter und Optiker William George Horner aus Bristol (UK um 1815) per eine starke schematische Vereinfachung bedanken. Gänzlich verliert die Sache ihre Schrecken, wenn man auch noch die Erfindungen der Herren W. Schickard, B. Pascal, Ch. Babbage und (parallel dazu) W. Leibnitz, welche in Zahnrad-betriebenen sog. "Rechenmaschinen" aus Holz und Messing gipfelten, sein Eigen nennt: Da wird die rasche numerische Polynomauswerung zum Kinderspiel. Man folge lediglich sehr genau den nachstehenden Anweisungen
Windowtitle " HORNER-SCHEMA "
' Orig.-Quelle: E.Floegel: Pascal-Handbuch S. 76
' Nach Profan transkribiert, Fehler abgefangen und adaptiert 2012 P. Specht
' (D) Nur per Demonstrationszwecke - ohne jedwede Gewähr!
windowstyle 1048 : font 2 : randomize
window %maxx\4,0-%maxx\2,%maxy-41
set("decimals",15):declare x!,y!,z!,i&,n&,a![],a$
grad:
Cls rnd(8^8)
print
print " Numerische Polynomauswertung mittels Horner-Schema"
print
print " Grad des Polynoms: ";n&
locate %csrlin-1,21
input a$
case a$>"":n&=val(a$)
setsize a![],n&+1
neukoeff:
print
print " Bitte Koeffizienten eingeben: "
print
whileloop n&,0,-1
print " Koeff. von x^";str$(&Loop);
print " = a[';str$(&Loop);'] ";
case &Loop<10:print " ";
print "= ";
case a![&Loop]>0:print tab(28);a![&Loop];
print
locate %csrlin-1,28
input a$
case a$>"":a![&Loop]=val(a$)
endwhile
xwert:
print
print " Auswertung an der Stelle x = ";
case x!>0:print x!;
print
locate %csrlin-1,31
input a$
case a$>"":x!=val(a$)
y!=0
whileloop n&,0,-1
y!=y!*x!+a![&Loop]
endwhile
print "------------------------------------------------------------------------"
print " Polynomwert an Stelle ";x!;" ist : ";
if abs(y!)>10^6
print format$("%e",y!)
else
print y!
endif
y!=0
print "------------------------------------------------------------------------"
print " Für anderes x berechnen? ";
input a$
a$=lower$(a$)
case ord(a$)=ord("j"):goto "xwert"
case val(a$)<>0:beep
case val(a$)<>0:goto "xwert"
print " Für andere Koeffizienten bei Grad ";n&;" berechnen? ";
input a$
a$=lower$(a$)
if ord(a$)=ord("j")
cls rnd(8^8)
goto "neukoeff"
endif
print " Anderes Polynom berechnen? ";
input a$
a$=lower$(a$)
case ord(a$)=ord("j"):goto "grad"
print
beep
print " Wiedersehen! "
waitinput 5000
|
|
|
| Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 07.05.2021 ▲ |
|
|
|