Seite 1 von 1

Re: Funktionen in Basic

Verfasst: Mi, 12.09.2012 16:47
von Stephan
z.B.:

Code: Alles auswählen

Sub TestMin
  Const N=5
  Dim a(N) as Double
  a(0)=1.1 : a(1)=1 : a(2)=1 : a(3)=2 : a(4)=0.5
  Msgbox "Kleinste Zahl = " & MinD(a,N)
End Sub

Function MinD (ar as Double, anzahl as Integer)
  Dim i as Integer
  Dim MinX as Double
  MinX = ar(0)
  For i=0 to anzahl-1
    if ar(i)< MinX then
      MinX=ar(i)
    end if
  Next i
  MinD = MinX
End Function

Gruß
Stephan

Re: Funktionen in Basic

Verfasst: Mi, 12.09.2012 17:04
von juetho
Hallo, du machst mehrere Fehler:
  • Du erschwerst uns die Hilfe, weil du die Aufgabenstellung nicht erwähnst. Erst aus der vorletzten Code-Zeile kann ich ableiten, dass du aus einem double-Array die kleinste Zahl bestimmen willst.
  • Du erschwerst uns die Hilfe, weil du Code nicht als solchen anzeigst: Code-Abschnitte markieren und mit der Taste "Code" hervorheben.
  • Ein Array wird in StarBasic etwas seltsam definiert: a(5) bereitet einen Speicher von 6 Elementen vor mit den Indizes 0 bis 5. (Bei Stephans Lösung wird dieses Problem durch die Schleifengrenzen "umgangen".
  • MinD erhält keinen Anfangswert. Ich würde mich nicht darauf verlassen, dass es mit 0 initialisiert wird (was angesichts der Aufgabenstellung auch falsch wäre, siehe Stephans Lösung).
  • for wird nicht ganz korrekt benutzt, siehe den folgenden Link.
  • "will einfach nicht laufen" ist als Fehlerbeschreibung etwas wenig. An welcher Stelle im Programmablauf passiert was, oder was fehlt? Dazu kann man Makros schrittweise ausführen und Variable beobachten.
Zum Einlesen und Nachschlagen gibt es im "obersten" Eintrag viele Informationen zur StarBasic-Programmierung. Vor allem der erste Link zu Andrew Pitonyak ist sehr hilfreich. Jürgen

Re: Funktionen in Basic

Verfasst: Mi, 12.09.2012 17:44
von juetho
Student25 hat geschrieben:Nun nochmal zurück zu Jürgens sauberen Quellcode:
-Was genau geschieht dort? Und was hat er wie anders gelöst als ich?
Ich will mich nicht mit fremden Federn schmücken. Der saubere Quellcode stammt nicht von mir, sondern von Stephan. Die Erklärungen dafür, was Stephan anders gemacht hat als du, solltest du aus dem Vergleich der einzelnen Code-Zeilen zusammen mit meinen Fehlerhinweisen entnehmen.
Und zu meinem Quellcode:
-Ich habe meinen Code schrittweise ausgeführt, und da ist mir aufgefallen, dass die Sub überhaupt nicht aufgerufen wurde. Wie kann das sein?
Die "Sub" wird nicht aufgerufen? Die musst du doch sowieso manuell starten. Oder meinst du, dass die Funktion MinD nicht aufgerufen wird? Das wird sie bei mir; aber weil die for-Schleife falsch definiert ist, wird der ganze Rest übersprungen, und MinD erhält niemals einen Rückgabewert.

Jürgen

Re: Funktionen in Basic

Verfasst: Mi, 12.09.2012 18:12
von juetho
Student25 hat geschrieben:Okay :) Ich versteh den Quellcode aber noch nicht hundertprozentig. Könnte jemand die einzelnen Vorgänge erklären? Was geschieht? :)
Wenn du den Code "noch nicht hundertprozentig" verstehst, bedeutet das doch, dass du "fast alles" verstehst. Dann ist es besser andersherum: Was verstehst du noch nicht? Außerdem handelt es sich um viele kleine Schritte, die eigentlich "selbsterklärend" sind, zumal dein eigener Code nur in kleinen, wenn auch wirkungsvollen Stücken von Stephans Code abweicht. Jürgen

Re: Funktionen in Basic

Verfasst: Mi, 12.09.2012 20:46
von Stephan
Ich habe meinen Code schrittweise ausgeführt, und da ist mir aufgefallen, dass die Sub überhaupt nicht aufgerufen wurde. Wie kann das sein?
Ich habe keine Ahnung da bei dem von mir geposteten Code natürlich die Sub aufgerufen wird und dann ihrerseits die Function aufruft.

Als Fehler bzw. problematische Dinge in DEinem Code erachte ich im Übrigen (ergänzend zu den Aussagen von Jürgen):

Code: Alles auswählen

Function MinD (array as Double, anzahl as Integer)
array ist ein Schlüsselwort in Basic und darf/sollte nicht als Variablennamen verwendet werden

Code: Alles auswählen

Dim MinD as Integer
funktioniert nur für Ganzzahlen und sollte auch nicht in einer Funktion gleichen Namens verwendet werden
Was genau geschieht dort?

Code: Alles auswählen

Const N=5
definiert die Konstante N mit Wert 5

Code: Alles auswählen

Dim a(N) as Double
Deklariert das Array a

Code: Alles auswählen

a(0)=1.1 : a(1)=1 : a(2)=1 : a(3)=2 : a(4)=0.5
weist dem Array Werte zu

Code: Alles auswählen

Msgbox "Kleinste Zahl = " & MinD(a,N)
Gibt das Ergebnis der Funktion in Verknüpfung mit einerm String aus

Code: Alles auswählen

Dim i as Integer
Dim MinX as Double
deklariert Variablen

Code: Alles auswählen

MinX = ar(0)
weist der Variable MinX den Wert des Feldes mit Index 0 der Array-Variable ar zu

Code: Alles auswählen

For i=0 to anzahl-1
Schleife zählt von 0 bis 4 (bei anzahl = 5)

Code: Alles auswählen

if ar(i)< MinX then
prüft Wert

Code: Alles auswählen

MinX=ar(i)
weist der Variable MinX den Wert des Feldes mit Index i der Array-Variable ar zu

Code: Alles auswählen

end if
Ende der If-Schleife

Code: Alles auswählen

Next i
Ende der For-Next-Schleife

Code: Alles auswählen

MinD = MinX
weist der Funktion MinD den Wert der Variable MinX als Rückgabewert zu

Ich glaube daher kam auch mein Fehler "Argument ist nicht optional".
Der kommt wohl eher von der Verwendiung von "array" als Variablen-Namen, ich habs aber nicht getestet
wird ja ein Array erzeugt
Nein, es werden nur einem bereits existierenden Array Werte zugfewiesen
wieso kann ich mir dieses Array nicht per "MsgBox"ausgeben?
weil es kein 'zusammenhängender Ausdruck' ist, Du must also beispielsweise einen String erzeugen

Code: Alles auswählen

Dim bla As String
bla = ""
For i = 0 To 4
  bla = bla & a(i) & CHR(13)
Next i
Msgbox bla
Was meinst du mit "Sub manuell starten"?


Ist jetzt wirklich nicht Dein Ernst? Die Antwort ist in der Basic-IDE auf die SChaltfläche "Basicprogramm ausführen" klicken oder in der normalen Programmumgebung das Makro über den 'Makros verwalten'-Dialog aufrufen.
Wenn ich mein Basic-Programm ausführe müssen doch alle "Sub" und "Func" ausgegeben werden, oder etwa nicht?
Nein, und im Übrigen nicht "ausgegeben" sondern ausgeführt.



Gruß
Stephan

Re: Funktionen in Basic

Verfasst: Mi, 12.09.2012 21:06
von Karolus
Hallo
Ende der If-Schleife
if Schleife

Karolus

Re: Funktionen in Basic

Verfasst: Fr, 14.09.2012 09:24
von Stephan
Karolus hat geschrieben:Hallo
Ende der If-Schleife
if Schleife

Karolus
Danke für die Korrektur.

(ist ja lustig das es dafür eine eigene Webseite gibt)


Gruß
Stephan