EVALUATE/BERECHNE-Funktion nachrüsten?

Hallo MitLISTige,

ich habe gerade wieder einen Nachhilfeschüler, dem ich parallel
Mathematik und den Umgang mit einer Tabellenkalkulation nahe bringen
soll.

Da wir uns gerade lineare und quadratische Gleichungen vorgenommen
haben, dachte ich mir, ich könnte mal meine (gefühlt 1000 Jahre) alten
Funktionsplot-Tabellen zu reaktivieren, die ich noch zu meinen
AMIGA-Zeiten gebastelt hatte.

Turbocalc hatte dabei eine Funktion BERECHNE("Formel"), so dass ich
ohne jede Makros o.ä. auch die gewünschte Funktion als Text in eine
Zelle schreiben konnte. Mit der Konstruktion

  =BERECHNE(WECHSELN("Formel mit x";"x";Zelle mit x-Wert))

ließ sich dann prima die Wertetabelle berechnen.

Ich habe das erst mal so gelöst, dass ich die benötigte Funktion (wie
in der Hilfe beschrieben) mit BASIC definiert habe, aber die Lösung mit
der BERECHNE()-Funktion (bzw. engl. EVAL()/EVALUATE()) finde ich
persönlich "schicker".

Gibt es ggf eine Erweiterung, die eine solche Funktion zur Verfügung
stellt? Ein entsprechender Formel-Parser dürfte ich Calc ja eigentlich
eingebaut sein :wink:

Gruß,
Michael

Hi Michael, *,

Da wir uns gerade lineare und quadratische Gleichungen vorgenommen
haben, dachte ich mir, ich könnte mal meine (gefühlt 1000 Jahre) alten
Funktionsplot-Tabellen zu reaktivieren, die ich noch zu meinen
AMIGA-Zeiten gebastelt hatte.

Funktionsplot-Funktion hat Calc nicht, außer manuell/per Ausfüllen
x-Werte einzufügen und die y-Werte per entsprechender Formel berechnen
und dann über x/y Graph ausgeben lassen.

Geht ja alles per copy'n'paste recht schnell.

Ich habe das erst mal so gelöst, dass ich die benötigte Funktion (wie
in der Hilfe beschrieben) mit BASIC definiert habe, aber die Lösung mit
der BERECHNE()-Funktion (bzw. engl. EVAL()/EVALUATE()) finde ich
persönlich "schicker".

Nee, das funktioniert nicht wirklich - eine Formel kann nicht werte in
anderen Zellen verändern.

Gibt es ggf eine Erweiterung, die eine solche Funktion zur Verfügung
stellt? Ein entsprechender Formel-Parser dürfte ich Calc ja eigentlich
eingebaut sein :wink:

dmaths kann Funktionen plotten - evtl. ist das ja eine Alternative
(gibt aber keine Wertetabelle aus)
http://dmaths.projects.ooodev.org/ (dt. Seite)
http://www.dmaths.org/ (frz. "Original"
http://dmaths.projects.ooodev.org/Dmaths/plotter.png - Screenshot in
OOo 1.1.0 - dmaths ist eine der Ältesten und eine der beliebtesten
noch dazu (bei Mathe/Formel-lastigen Leuten zumindes :-))

ciao
Christian

Hallo Christian,

> Da wir uns gerade lineare und quadratische Gleichungen vorgenommen
> haben, dachte ich mir, ich könnte mal meine (gefühlt 1000 Jahre)
> alten Funktionsplot-Tabellen zu reaktivieren, die ich noch zu meinen
> AMIGA-Zeiten gebastelt hatte.

Funktionsplot-Funktion hat Calc nicht, außer manuell/per Ausfüllen
x-Werte einzufügen und die y-Werte per entsprechender Formel berechnen
und dann über x/y Graph ausgeben lassen.

Genau darum geht es. In den Aufgaben des Schülers wird nach
Wertetabellen und (einfachen) Funktionsplots gefragt. Die Plots
erledigen sie in der Schule mit Grafik-Taschenrechnern. Da der Gute
aber auch ein wenig mit Tabellenkalkulationen umgehen lernen möchte,
bietet sich hier ein weites Feld.

Da es z.B. auch um die Nullstellensuche bei Polynomen geht, ist so
z.B. meine Tabelle zur Polynomdivision wieder zu Ehren gekommen.

Was die Plots angeht: Der Taschenrechner kann nur 100 Punkte, daher
muss das nicht so genau sein. Eine der Tabellen funktioniert(e auf dem
AMIGA) so:

  A1: untere Intervallgrenze
  A2: obere Intervallgrenze
  A3: Schrittweite (A2-A1)/99

  A5: =A1

  B5-B104: Berechnete y-Werte zu den jeweiligen Werten in A5-A104

Neben diesen Zellen liegt dann das Xy-Diagramm als "Grafikdisplay"

In A4 liegt beim Original die Funktion als Text mit x als Variablen,
die Berechnung der y-Werte erfolgte wie beschrieben.

> Ich habe das erst mal so gelöst, dass ich die benötigte Funktion
> (wie in der Hilfe beschrieben) mit BASIC definiert habe, aber die
> Lösung mit der BERECHNE()-Funktion (bzw. engl. EVAL()/EVALUATE())
> finde ich persönlich "schicker".

Nee, das funktioniert nicht wirklich - eine Formel kann nicht werte in
anderen Zellen verändern.

Davon war nicht die Rede. Stell dir folgende Situation vor:

  A4="3*x-7" (Geradengleichung)
  A5="2" (Untere Intervallgrenze)

Nun soll in B5 der zu A5 gehörige y-Wert mit der Funktion in A4
berechnet werden:

  B5=BERECHNE(WECHSELN(A4;"x";A5))
     BERECHNE(WECHSELN("3*x-7";"x";"2"))
     BERECHNE("3*2-7")
     -1

Analog für B6-B104.

Es geht, wenn ich in der Makroverwaltung eine Funktion definiere (z.B.
MYF=3*x-7) und diese dann zur Berechnung der y-Werte verwende, aber ich
möchte gerne die Funktion in der Tabelle haben.

Wenn es nur um bestimmte Funktionstypen ginge, könnte ich auch deren
Parameter als Eingabefelder in die Tabelle nehmen (bei Geraden reicht
ja Steigung und Achsenabschnitt), aber dann bräuchte ich auf Dauer sehr
viele Tabellenblätter für ein und den selben Zweck.

Im BASIC von LO dürfte es eine entsprechende eval()-Funktion geben, die
Frage ist, wie ich mir die nutzbar machen könnte...

Gruß,
Michael

Cursor in B5, Einfügen|Namen→Festlegen name="meineFormel"
Wert/Bezug = "3*A5-7" → OK
dann in B5 "=meineFormel", copy'n'paste/ausfüllen bis B104

ciao
Christian

Hallo Michael

Davon war nicht die Rede. Stell dir folgende Situation vor:

  A4="3*x-7" (Geradengleichung)
  A5="2" (Untere Intervallgrenze)

Nun soll in B5 der zu A5 gehörige y-Wert mit der Funktion in A4
berechnet werden:

  B5=BERECHNE(WECHSELN(A4;"x";A5))
     BERECHNE(WECHSELN("3*x-7";"x";"2"))
     BERECHNE("3*2-7")
     -1

Analog für B6-B104.

Du kannst auch für $A5 ( beachte das fehlende $-zeichen vor 5 ) einen Namen "x" festlegen (→Einfügen→Namen→Festlegen ) und in B5 quasi direkt die Formel =3*x-7 verwenden, und nach unten ziehen.

Im BASIC von LO dürfte es eine entsprechende eval()-Funktion geben, die
Frage ist, wie ich mir die nutzbar machen könnte...

In StarBasic gibts keine entsprechende Funktion, aber in Python als Calc-addin ist das relativ einfach. Bei Bedarf kann ich dir dir als PM zukommen lassen.

Gruß Werner

Hallo Christian,

Cursor in B5, Einfügen|Namen→Festlegen name="meineFormel"
Wert/Bezug = "3*A5-7" → OK
dann in B5 "=meineFormel", copy'n'paste/ausfüllen bis B104

Ja, klar, alter Hut! Aber ich versuche hier eine Eingabe einer Formel
in ein Feld hin zu bekommen um meine zig anderen alten Tabellen
recyclen zu können.

Schnell mal eine Wertetabelle zu basteln und ein xy-Diagramm zu machen
ist ja keine große Kunst... :wink:

Gruß,
Michael

Hallo Werner,

Du kannst auch für $A5 ( beachte das fehlende $-zeichen vor 5 ) einen
Namen "x" festlegen (→Einfügen→Namen→Festlegen ) und in B5 quasi
direkt die Formel =3*x-7 verwenden, und nach unten ziehen.

Dann rechne ich ja jeden y-Wert für den gleichen x-Wert aus!

Auf die Schnelle mach ich es so:

  A1 x-Startwert
  A2 nächster x-Wert

  Markieren von A1:A2 und ziehen bis An

  B1=Formel mit A1 als x-Wert
  B1 nach B2:Bn kopieren

  A1:Bn markieren und xy-Diagramm aufrufen

Wenn man einem Nachhilfeschüler aber die Auswirkungen von
Parameteränderungen in Funktionen vor Augen führen will, ist es
einfach "plastischer", wenn man die Funktion schnell modifizieren und
die sich dadurch ergebenden Änderungen schnell sehen kann.

> Im BASIC von LO dürfte es eine entsprechende eval()-Funktion geben,
> die Frage ist, wie ich mir die nutzbar machen könnte...

In StarBasic gibts keine entsprechende Funktion,

Das habe ich vor wenigen Minuten mit Erschrecken festgestellt!

aber in Python als Calc-addin ist das relativ einfach. Bei Bedarf kann ich dir dir als
PM zukommen lassen.

Ich habe mittlerweile eine Lösung als Javascript-Funktion eingebettet
in BASIC-Code gesehen. Es wäre toll, wenn du mir eine Python-Lösung zum
Vergleich zukommen lassen könntest.

Wobei es mir nicht klar ist, warum es keine eval()-Funktion im BASIC
gibt!?

Gruß,
Michael

...der gerade mal den alten UAE angeworfen hat, um das AMIGA-System von
1998(!) zu starten. Turbocalc sieht zwar nicht mehr schick aus, aber
für die nächsten beiden Nachhilfe-Termine wird es reichen :wink:

Ich bin immer wieder erstaunt, wie viele Features so manche meiner
alten Programme mit 1-2 MB Größe hatten, die in den heutigen
"Monsterpaketen" nicht mehr zu finden sind...

Hallo Michael

Hallo Werner,

Du kannst auch für $A5 ( beachte das fehlende $-zeichen vor 5 ) einen
Namen "x" festlegen (→Einfügen→Namen→Festlegen ) und in B5 quasi
direkt die Formel =3*x-7 verwenden, und nach unten ziehen.

Dann rechne ich ja jeden y-Wert für den gleichen x-Wert aus!

Eben nicht - deshalb ist die Adresse von 'x' ja halb relativ $A5

Auf die Schnelle mach ich es so:

  A1 x-Startwert
  A2 nächster x-Wert

  Markieren von A1:A2 und ziehen bis An

  B1=Formel mit A1 als x-Wert
  B1 nach B2:Bn kopieren

  A1:Bn markieren und xy-Diagramm aufrufen

Wenn man einem Nachhilfeschüler aber die Auswirkungen von
Parameteränderungen in Funktionen vor Augen führen will, ist es
einfach "plastischer", wenn man die Funktion schnell modifizieren und
die sich dadurch ergebenden Änderungen schnell sehen kann.

Im BASIC von LO dürfte es eine entsprechende eval()-Funktion geben,
die Frage ist, wie ich mir die nutzbar machen könnte...

In StarBasic gibts keine entsprechende Funktion,

Das habe ich vor wenigen Minuten mit Erschrecken festgestellt!

aber in Python als Calc-addin ist das relativ einfach. Bei Bedarf kann ich dir dir als
PM zukommen lassen.

Ich habe mittlerweile eine Lösung als Javascript-Funktion eingebettet
in BASIC-Code gesehen. Es wäre toll, wenn du mir eine Python-Lösung zum
Vergleich zukommen lassen könntest.

Wird gemacht, dauert aber ein bis zwei Stunden.

Gruß Werner

Hallo Werner,

>> Du kannst auch für $A5 ( beachte das fehlende $-zeichen vor 5 )
>> einen Namen "x" festlegen (→Einfügen→Namen→Festlegen ) und in B5
>> quasi direkt die Formel =3*x-7 verwenden, und nach unten ziehen.
>
> Dann rechne ich ja jeden y-Wert für den gleichen x-Wert aus!
Eben nicht - deshalb ist die Adresse von 'x' ja halb relativ $A5

Ah klar... ich war heute morgen noch nicht wirklich wach...

>> aber in Python als Calc-addin ist das relativ einfach. Bei Bedarf
>> kann ich dir dir als PM zukommen lassen.
>
> eingebettet in BASIC-Code gesehen. Es wäre toll, wenn du mir eine
> Python-Lösung zum Vergleich zukommen lassen könntest.

Wird gemacht, dauert aber ein bis zwei Stunden.

Hat keine Eile! Ich arbeite bis 19:00 und komme vor 19:30 ohnehin nicht
zu basteln.

Vielen Dank im Voraus!

Michael

Hallo Michael,

schau mal auf meiner HP http://friege.de/ooo/index.htm
nach "Funktionsgraphen"
- calc_funktion.ods verwendet zwar Makros, ist aber vielleicht trotzdem nützlich...

Gruß
Gisbert

Werner Tietz schrieb:

Du kannst auch für $A5 ( beachte das fehlende $-zeichen vor 5 ) einen
Namen "x" festlegen (→Einfügen→Namen→Festlegen ) und in B5 quasi direkt
die Formel =3*x-7 verwenden, und nach unten ziehen.

Auch ich bin an einer schülergerechteren Lösung interessiert.
Den Bezug $A5 mit x zu benennen, ist schn mal eine gute Idee. Aber:

- nirgendwo in der Tabelle kann man dann die Funktionsdefinition
wirklich lesen, sie wird ja nicht als Text dargestellt, sondern es
erscheint nur der berechnete Wert.

- wenn die Funktion geändert wird, dann muss man die neue
Funktionsdefinition wieder manuell nach unten kopieren.
Hierbei erscheint mir den Benennung von $a5 mit x übrigens hinderlich.
Denn durch das Kopieren der Formel =3*A5-7 sieht man, wenn man
nachträglich in die Zellen klickt, was sich geändert hat (nämlich der
Bezug zu dem x-Wert). Wenn überall =3*x-7 steht, sieht man dies nicht.

Ich fände es schön, wenn man die Funktionsdefinition nur an einer Stelle
ändern müsste und schon würde sich alles entsprechend mitanpassen.
Andererseits gibt es für sowas geeignetere Hilfsmittel (z.B. GeoGebra).
Vielleicht in Tabellenkalkulation dafür einfach die falsche Wahl des
Hilfsmittels.

(ein anderer) Michael

Hallo Michael ( Kuehn )

Werner Tietz schrieb:

Du kannst auch für $A5 ( beachte das fehlende $-zeichen vor 5 ) einen
Namen "x" festlegen (→Einfügen→Namen→Festlegen ) und in B5 quasi direkt
die Formel =3*x-7 verwenden, und nach unten ziehen.

Auch ich bin an einer schülergerechteren Lösung interessiert.
Den Bezug $A5 mit x zu benennen, ist schn mal eine gute Idee. Aber:

- nirgendwo in der Tabelle kann man dann die Funktionsdefinition
wirklich lesen, sie wird ja nicht als Text dargestellt, sondern es
erscheint nur der berechnete Wert.

Die Formel selbst kann man per =FORMEL(B5) "sichtbar machen"

- wenn die Funktion geändert wird, dann muss man die neue
Funktionsdefinition wieder manuell nach unten kopieren.

Wenn die Funktion in der Nachbarspalte der x-werte steht, reicht es die oberste Formel anzupassen, und ein Doppelklick auf die rechte untere Ecke der Zelle.

Gruß Werner

Hallo Michael, *,

Hallo Christian,

Cursor in B5, Einfügen|Namen→Festlegen name="meineFormel"
Wert/Bezug = "3*A5-7" → OK
dann in B5 "=meineFormel", copy'n'paste/ausfüllen bis B104

Ja, klar, alter Hut! Aber ich versuche hier eine Eingabe einer Formel
in ein Feld hin zu bekommen um meine zig anderen alten Tabellen
recyclen zu können.

Ob ich jetzt die Formel in einer Zeille ändere, oder den "Namen"
bearbeite macht doch nicht wirklich einen großen Unterschied, oder?
Ansonsten kannst Du ja auch in der Namens-Zelle eine Formel
zusammenparsen, dann hast Du Deine Lösung.

Schnell mal eine Wertetabelle zu basteln und ein xy-Diagramm zu machen
ist ja keine große Kunst... :wink:

Genau. Und deshalb verstehe ich Dein Problem wohl noch nicht so ganz.
Bzw. verstehe nicht, warum eben diese simplen Lösungen für Dich
"unbrauchbar" sind.

ciao
Christian

Hallo (anderer) Michael :wink:

Ich fände es schön, wenn man die Funktionsdefinition nur an einer
Stelle ändern müsste und schon würde sich alles entsprechend
mitanpassen. Andererseits gibt es für sowas geeignetere Hilfsmittel
(z.B. GeoGebra). Vielleicht in Tabellenkalkulation dafür einfach die
falsche Wahl des Hilfsmittels.

Naja... Ich habe mir mal mein Archiv angeschaut und dabei gesehen, dass
diese Funktion in mindestens 3 Tabellenkalkulationen meines guten alten
Amiga vor 20 Jahren offenbar drin war...

Es ist schade, dass so irrsinnig viele Features in neuerer Software
drin sind, aber viele hübsche kleine Dinge rausgeflogen sind, die mich
"alten Bastler" begeistert haben.

Gruß,
Michael

Michael Höhne schrieb:

Turbocalc hatte dabei eine Funktion BERECHNE("Formel")

Hallo,

so etwas ließe sich ja sicherlich (wie auch aus der Diskussion herovr geht, als Makro verwirklichen, und wenn's klappt, könnte die Funktinoserweiterung als Extension allgemein verfügbar gemacht werden.
<http://wiki.documentfoundation.org/Extensions_Repository>

Grüße

Rainer

Hallo Christian,

Hallo Michael, *,

Ob ich jetzt die Formel in einer Zeille ändere, oder den "Namen"
bearbeite macht doch nicht wirklich einen großen Unterschied, oder?

Doch: Du musst die geänderte Formel dann noch in die anderen Zellen
kopieren.

> Schnell mal eine Wertetabelle zu basteln und ein xy-Diagramm zu
> machen ist ja keine große Kunst... :wink:

Genau. Und deshalb verstehe ich Dein Problem wohl noch nicht so ganz.
Bzw. verstehe nicht, warum eben diese simplen Lösungen für Dich
"unbrauchbar" sind.

Es geht nicht darum, für mich auf die Schnelle was zusammen zu basteln,
sonder um das Vorführen von Änderungen in einer Funktionsdefinition und
deren Auswirkungen auf den Graphen während des Nachhilfe-Unterrichts.

Nehme ich z.B. die Funktion x^2+4 und ändere den Wert 4 in 3, so kann
der geneigte Schüler sehen, wie sich die Parabel um 1 Einheit "absenkt"
o.ä.

Wenn ich erst eine Scroll/Copy/Paste-Aktion mache, dann kann ich erst
nach dem Vorgang das Resultat sehen, nicht das "Runterfluppen" der
Parabel.

Ich habe hier auch noch eine ganze Menge weiterer Tabellen, die nur
wegen der BERECHNE()-Funktion sehr einfach zu handhaben sind... Das
obige Beispiel ist nur eines davon. Ich halte so eine
BERECHNE()/EVAL()-Funktion für eine tolle Sache.

Gruß,
Michael

Hallo Michael,

Michael Höhne schrieb:

Hallo MitLISTige,

ich habe gerade wieder einen Nachhilfeschüler, dem ich parallel
Mathematik und den Umgang mit einer Tabellenkalkulation nahe bringen
soll.

Da wir uns gerade lineare und quadratische Gleichungen vorgenommen
haben, dachte ich mir, ich könnte mal meine (gefühlt 1000 Jahre) alten
Funktionsplot-Tabellen zu reaktivieren, die ich noch zu meinen
AMIGA-Zeiten gebastelt hatte.

Turbocalc hatte dabei eine Funktion BERECHNE("Formel"), so dass ich
ohne jede Makros o.ä. auch die gewünschte Funktion als Text in eine
Zelle schreiben konnte. Mit der Konstruktion

  =BERECHNE(WECHSELN("Formel mit x";"x";Zelle mit x-Wert))

ließ sich dann prima die Wertetabelle berechnen.

Ich habe das erst mal so gelöst, dass ich die benötigte Funktion (wie
in der Hilfe beschrieben) mit BASIC definiert habe, aber die Lösung mit
der BERECHNE()-Funktion (bzw. engl. EVAL()/EVALUATE()) finde ich
persönlich "schicker".

Gibt es ggf eine Erweiterung, die eine solche Funktion zur Verfügung
stellt? Ein entsprechender Formel-Parser dürfte ich Calc ja eigentlich
eingebaut sein :wink:

Du kannst ein universelles Tabellenblatt erstellen, bei dem du nur in einer Zelle den jeweils gewünschten Funktionsterm eingibst. Das geht mit der Funktion 'MEHRFACH.OPERATIONEN'(leider über den Assistenten nicht erreichbar). Ein Beispiel ist in http://www.ooowiki.de/MehrfachOperation

Auf der Seite steht noch die alte Schreibweise ohne Punkt, aber die Beispieldatei funktioniert wie gewünscht und der Funktionsname wird automatisch auf die neue Schreibweise mit Punkt umgestellt.

MfG
Regina

Hallo Rainer

Michael Höhne schrieb:

Turbocalc hatte dabei eine Funktion BERECHNE("Formel")

Hallo,

so etwas ließe sich ja sicherlich (wie auch aus der Diskussion herovr
geht, als Makro verwirklichen, und wenn's klappt, könnte die
Funktinoserweiterung als Extension allgemein verfügbar gemacht werden.
<http://wiki.documentfoundation.org/Extensions_Repository>

Im Prinzip hab ich eine solche Extension schon fertig hier liegen, ich möchte das aber erst veröffentlichen wenn ich:
a. ein paar mehr nützliche Funktionen eingebaut habe.
b. ich ausreichend getestet habe ob die Funktion selbst nicht ein Sicherheitsloch darstellt.

Gruß Werner

Hallo Michael,

...Es geht nicht darum, für mich auf die Schnelle was zusammen zu basteln,
sonder um das Vorführen von Änderungen in einer Funktionsdefinition und
deren Auswirkungen auf den Graphen während des Nachhilfe-Unterrichts.

Nehme ich z.B. die Funktion x^2+4 und ändere den Wert 4 in 3, so kann
der geneigte Schüler sehen, wie sich die Parabel um 1 Einheit "absenkt"
o.ä.

...

wenn ich Dein Problem richtig verstehe, müsste es so zu ändern sein:
Statt =x^2+4 gibst Du ein =x^$A$1+$B$1 (Bezeichnung der Zellen nur als Beispiel).
In die Zellen A1 und B1 gibst Du dann die gewünschten Werte ein und das Diagramm wird sich ohne weitere vorzunehmende Aktionen entsprechend aktualisieren.

Besser geeignet ist für das Ändern von Parametern aber GeoGebra: Man kann mit dem Programm sehr leicht eine dynamische Änderung des Graphen bei sich verändernden Parametern zeigen. Siehe folgendes Beispiel:
http://gfs.khmeyberg.de/Materialien/IIMathematik/Geogebra/KurvenscharAnimation.html

Es grüßt
Karl-Heinrich Meyberg

Hallo Regina,

Hallo Michael,

... Das geht
mit der Funktion 'MEHRFACH.OPERATIONEN'(leider über den Assistenten
nicht erreichbar). Ein Beispiel ist in
http://www.ooowiki.de/MehrfachOperation

Das sieht auch sehr spannend aus! Ich habe von Werner eine Testversion
mit Python-Code erhalten, werde mir aber auch deine Idee mal näher
anschauen.

Ich sage ja immer: Mit einer guten Tabellenkalkulation kann man fast
alles machen, zur Not sogar das Betriebssystem ersetzen ;-)))

Gruß,
Michael