Forum
Tipps
News
Menu-Icon

Programmieren in open office

hey ,
hab folgendes problem:
hab noch nie in meinem leben in basic programmiert und soll nun ein programm schreiben das das maximum einer funktion herrausfindet und zwar mit der methode " Aufstieg des kleinen mannes" und das denn grafisch darstellen.
ich hab mich schon da durchgefuchst und einiges hinbekommen  jedoch bekomme ich es

1. nicht hin das die x- und y- schritte nacheinander durchgeführt werden, also das erst nur der x wert erhöht oder vermindert wird und danach denn der y- wert und dann wieder nur der x- wert und so weiter...

2. bekomme ich es nicht hin das die funktion abbricht wenn sich der Funktionswert nur noch minimal ändert. bei mir läuft er ja einfach die 100 schritte durch:(

vlt kann mir ja jmd helfen?!
wäre echt super, denn bin schon so weit gekommen und wäre super glücklich wenn ich das fertig bekommen würde:)

hier mein jetziges programm:

REM  *****  BASIC  *****
Option Explicit       'schaltet automatische Variablendeklariation ab

' deklarieren von öffentlichen Variablen
public oCalcDokument as Object
public oTabellenBlatt as Object
public oZelle as Object

'deklarieren der zu verwendenen Varaiblen
public a(5) as double
public funktionswert as double
public x, y as double
public x_schritt as double
public y_schritt as double
public schrittweite as double
public speicher(100) as double
public schrittzahl as integer

Sub MaximumSuche

' lokale Variablen deklarieren
Dim n as integer

' Festlegen der Schrittweite
schrittweite = 1

werte

'Berechnen der Formel
funktionswert = a(0) + a(1)*x + a(2)*x^2 + a(3)*y + a(4)*y^2 + a(5)*x*y

For n=1 to 100

'zählen der Schritte
schrittzahl = schrittzahl + 1

x_probe
y_probe

speicher(n) = funktionswert

'Beginn der schleife
if n >= 4 then
   if speicher(n-4) = funktionswert then
      schrittweite = schrittweite / 2
   end if
end if

report

Next n

'Ausgabe in das Tabellenblatt
'holen des Tabellenblattes
oTabellenBlatt = oCalcDokument.Sheets(0)
'Ausgabe von z(x,y)
oZelle = oTabellenblatt.getCellbyPosition(1,3)
oZelle.VALUE = funktionswert
'Ausgabe vom x-Wert
oZelle = oTabellenblatt.getCellbyPosition(2,3)
oZelle.VALUE = x_schritt
'Ausgabe vom y-Wert
oZelle = oTabellenblatt.getCellbyPosition(3,3)
oZelle.VALUE = y_schritt

'Ausgabe des Ergebnisses auf dem Bildschirm
MsgBox "Maximum liegt bei " & funktionswert

End Sub

'_____________________________________________________________________ _________________________


'Damit alle Prozeduren und Funktionen die Werte weiter verarbeiten können, holt diese
'Funktion alle vom Benutzer eingegenen Werte und speichert diese in den öffentlichen Variablen.

Sub Werte

'deklarieren lokaler variablen
dim n as Integer

'holen des Dokumentes
oCalcDokument = ThisComponent
'holen des 2. Tabellenblattes (Parameter)
oTabellenblatt = oCalcDokument.Sheets(1)

'holen der Koeffizienten
for n = 0 to 5
   oZelle = oTabellenblatt.getCellbyPosition(2,n+1)
   a(n) = oZelle.VALUE
   
Next n

End Sub

'_____________________________________________________________________ ____________________________


'x_Probe berechnet die Probeschritte in + bzw. - x-Richtung und entscheidet ob eine
'Verbessrung vorhanden ist

Sub x_probe

' lokale Variablen deklarieren
dim x_wert as double

'Schritt in + x-Richutng
x = x_schritt + schrittweite

x_wert = a(0) + a(1)*x + a(2)*x*x + a(3)*y + a(4)*y*y +a(5)*x*y

'Beginn der Schleife
If x_wert < funktionswert then
   x = x_schritt - schrittweite
   x_wert = a(0) + a(1)*x + a(2)*x*x + a(3)*y + a(4)*y*y +a(5)*x*y
End if

' aktuellen x_schritt ausführen
x_schritt = x

' Übergabe von x_wert an den Funktionswert
funktionswert = x_wert

End Sub

'_____________________________________________________________________ _____________________________


'y_Probe berechnet die Probeschritte in + bzw. - y-Richtung und entscheidet ob eine
'Verbessrung vorhanden ist

Sub y_probe

'lokale Variable deklarieren
dim y_wert as double

'Schritt in + y-Richtung
y = y_schritt + schrittweite

y_wert = a(0) + a(1)*x + a(2)*x*x + a(3)*y + a(4)*y*y +a(5)*x*y

'Beginn der Schleife
If y_wert < funktionswert then
   y = y_schritt - schrittweite
   y_wert = a(0) + a(1)*x + a(2)*x*x + a(3)*y + a(4)*y*y +a(5)*x*y
End if

' aktuellen y_schritt ausführen
y_schritt = y

' Übergabe von y_wert an den Funktionswert
funktionswert = y_wert

End Sub

'_____________________________________________________________________ ________________________________

'Report gibt eine Report über jeden Schritt in das Tabellenblatt aus

Sub report

'Holen den Dokumentes
oCalcDokument = ThisComponent
'Holen des 1.Tabellenblattes
oTabellenblatt = oCalcDokument.Sheets(0)

'Ausgabe der Werte
'Ausgabe Anzahl der Schritte
oZelle = oTabellenblatt.getCellbyPosition(1,schrittzahl+5)
oZelle.VALUE = Schrittzahl

'Ausgabe X-Wert
oZelle = oTabellenblatt.getCellbyPosition(2,schrittzahl+5)
oZelle.VALUE = x_schritt

'Ausgabe Y-Wert
oZelle = oTabellenblatt.getCellbyPosition(3,schrittzahl+5)
oZelle.VALUE = y_schritt

'Ausgabe z(x,y)
oZelle = oTabellenblatt.getCellbyPosition(4,schrittzahl+5)
oZelle.VALUE = funktionswert

'Ausgabe der Schrittweite
oZelle = oTabellenblatt.getCellbyPosition(5,schrittzahl+5)
oZelle.VALUE = schrittweite

End Sub

'_____________________________________________________________________ _________________________


sub Diagramm_Maximumsuche
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$C$7:$D$106"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:InsertObjectChart", "", 0, Array())

rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "$I$4"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())


end sub

« Für Profis : Mit einer Consolenanwendung ein Programm startengreenfootspiel: wie macht man levels »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
Subnetz
Ein Subnetz, (englisch "Subnet"), ist ein eigenständiger und abgetrennter Teil eines größeren Netzwerks. Die Aufteilung eines großen Netzwerks in kl...

Formatieren
  Das Formatieren einer Festplatte, HDD oder SSD bereitet das Laufwerk auf neue Daten vor. Dazu werden sämtliche alten Daten gelöscht, damit die...

Bildschirmschoner
Der eigentliche Sinn des Bildschirmschoners ist, den Bildschirm vor dem Einbrennen des Monitorbildes zu schützen.Während das bei neueren Monitoren (außer ...