Hallo.
wie kann ich strukturiertes Programmieren lernen?
Möglichkeit Eins ist die harte Tour, die Du gerade fährst. Sprich, irgendwann wirst Du Dich so darüber ärgern, den gleichen Sums wieder und wieder und immer wieder neu programmieren zu müssen, dass Du an den Punkt kommst, Dir über Wiederverwendbarkeit Gedanken zu machen (so weit bist Du ja schon fast).
Im Verlaufe vieler Codetippsessionen („Programmieren“ würde ich das, so wie Du es beschreibst, nicht nennen) wird Dir irgendwann eine fröhlich quer durch den Garten hopsende globale Variable einen Schleifenzähler oder Datensatzzeiger so verdrehen, dass Dir die Augen tränen - dann wird sich die Frage nach Kapselung und Variablendeklaration stellen.
Fassest Du möglicherweise einmal mit einem Kumpel zusammen ein größeres Projekt an und dieser „programmiert“ genau so methodisch wie Du, quadrieren sich die obigen Probleme. Du wirst dann auch die drei Todfeinde des Pogrammierers hassen lernen - Sauerstoff, Tageslicht und das unerträgliche Gebrüll der Vögel.
Zusammengefasst heißt das, dass Du Zeit in rauhen Mengen verschwendest, so lange es in Deinen Programmen zugeht wie auf einem codegewordenen Kindergeburtstag.
Möglichkeit Zwo : Wenn Du das nächste Mal ein Projekt angehen willst, schalt den Blechkumpel ab. Zieh Dich mit Bleistift, Zettel, Papier, Kuli, was zu schreiben und einem größeren Vorrat Deiner Lieblingskekse an einen Ort zurück, an dem kein Computer erreichbar ist. Dann schreibe ganz niedertechnologisch auf, was Du eigentlich vorhast, und zwar so, dass Du den Auftrag genau so gut einem Fremden geben könntest, der, außer der deutschen Sprache, gar nichts von Deinem Problem versteht. Also : als wolltest Du einem Doofen erklären, was Du gerade tust …
Du wirst feststellen, dass diese Erklärung Deines Problems auf Papier nur dann funktioniert, wenn Du vorgehst wie beim Klöße- Essen : Eins nach dem anderen, und schön mundgerecht schneiden. Kommst Du beim Verfassen des Textes von der Großmutter auf den Zwetschgenkuchen? Dann wird der „Doofe“ von weiter oben Dein Problem nicht verstehen - return to Start.
Deine Prosa- Problembeschreibung legst Du dann einem guten Freund vor, der möglichst nichts über das Programmieren weiß. Lass Dir von ihm (oder ihr) Deinen Text erklären … klingt wie Choctaw? Siehe vor. Wenn Du Dein Problem einem Menschen nicht verständlich machen kannst, wirst Du es dem Computer auch höchstens andressieren, aber nicht vernünftig beibringen können.
Und warum schrub ich nicht bei Möglichkeit Zwo von der harten Tour? Einfach, weil Dir diese Denkweise ganz viele Umwege ersparen wird. Sie wird Dir recht bald in Fleisch und Blut übergehen - Du wirst ein bärenstarker Analytiker, der bei einem Problem den berühmten Hasen aus dem Pfeffer buchstäblich leuchten sieht. Und dann bist Du auch nicht mehr eine Codekotzmaschine, sondern jemand, der wirklich Software entwickelt.
Wenn Du noch Puste hast, lass uns mal ein Problem gemeinsam angehen. Es sei die Aufgabe, ein Programm zu entwickeln, das den Logarithmus zu einer beliebigen Basis berechnet.
[Ich nehme an, Du weißt z.B.
<sub>2</sub> log 64 = 6, weil 2 ^ 6 = 64 bzw.
<sub>8</sub> log 64 = 2, weil 8 ^ 2 = 64 ...?]
Nun kennt unsere alte Tante VB schon von Haus aus den Logarithmus zur Basis e. DIe Funktion dafür heißt LOG(zahl). Wir wiederum wissen, dass LOG(a)/LOG(b) das Gleiche ist wie der Logarithmus von a zur Basis b. Also programmieren wir fleißig
Public Sub Version1(zahl, basis)
MsgBox Str$((Log(zahl)/Log(basis))
End Sub
und freuen uns über das gelungene Ergebnis. Schade, dass es nichts taugt … welche Macken hat unser Programm? Hier erst denken, dann weiterlesen.
Nun, Version1 ist eine Sub. Diese ist zwar Public, so dass wir sie von überall her aufrufen können - aber das Ergebnis wird nur auf den Bildschirm gekotzt und weiter nix.
Wir machen also eine neue Kiste auf
Public Function Version2(zahl, basis)
Version2=Str$((Log(zahl)/Log(basis))
End Sub
Die Eingabevariablen zahl und basis sind nicht deklariert - wir könnten also versuchen, den Logarithmus von „Murmel“ zur Basis „Grummel“ zu berechnen. Die Funktion würde diese Eingaben annehmen und erst bei der Berechnung aussteigen.
Ncoh n Lied
Public Function Version3(zahl as Double, basis As Double)
Version3=Str$((Log(zahl)/Log(basis))
End Sub
Version3 wird keine anderen Eingaben mehr erlauben als Zahlen. Trotzdem noch keine Zigarre - die Funktion liefert einen String als Ausgabewert, weil wir in Version1 einen String brauchten.
Und spielt der Kandidat weiter …? Schätzungsweise in Version17 wird eine Funktion entstanden sein, die
-
nur definierte Eingaben zulässt,
-
gegen Eingabefehler geschützt ist,
-
eine definierte Ausgabe besitzt,
-
kommentiert ist, damit man auch in 3 Wochen mit ihr noch kraftvoll ins Gras beißen kann,
>- und so weiter, und so chrysler …
Dabei handelt es sich wirklich nicht um Code, der irgendwelche Tricksereien erfordert : Es werden zwei Zahlen durch eine eingebaute Funktion gejagt und das Ergebnis beider dividiert. Mir sind schon komplexere Dinge untergekommen … Die Überlegungen von oben in einem Rutsch durchgeführt spart Zeit und schont Tastatur und Fingerkuppen.
-
Die Zahl, deren Logarithmus ermittelt werden soll, muss größer 0 sein.
-
Die Basis des Logarithmus muss ungleich 1 und größer 0 sein.
-
Der Ausgabewert ist meist krumm, muss also eine Double- Variable sein.
-
Es dürfen nur Zahlen verarbeitet werden.
-
Wenn wir etwas vergessen haben, soll uns das Programm verraten, was …
-
Einen Default für die Basis anzugeben, wäre auch nicht falsch.
-
[…]
und wir erhalten die Funktion
Public Function LogZuBasisX(dblExponent As Double, Optional dblBasis As Double = 10) As Double
If dblExponentDiese Version sollte unsere Anforderungen von oben erfüllen und beliebig einbaubar sein (Einschränkung : getestet ist sie nicht ...).
Du siehst den Unterschied zwischen "Trial and Furor" und einer systematischen Herangehensweise?
Prima.
Gruß kw