Seite 2 von 2

Verfasst: 30.04.2007 14:35
von duli
Danke für die Hilfestellung, ich glaube jetzt dämmert es mir, muss es noch etwas garren lassen. :freak:

Verfasst: 30.04.2007 14:39
von AND51
> Danke für die Anregung
Bitte, gern geschehen. Es macht mir immer wieder freude, anderen u helfen! :)

> habe über Macros in der Hilfe nachgelesen, aber ich habe nicht alles begriffen
Sei unbesorgt, mir ging es genauso. Du musst keine Macros benutzen, wenn du es nicht willst oder es noch nicht verstehst. Deswegen lacht dich keiner aus oder dein Programm gilt deswegen nicht als schlecht! Wichtig ist nur, dass du mir/uns sagst, was du schon alles kannst.
Nicht, dass ich/wir dir hier den tollsten Code auftischen du aber nur die Hälft verstehst.

> immer wieder erhalte ich Hinweise sorgsam mit dem Speicher oder der Performance zu sein
Nun, zunächst einmal: Der Computer soll dir die Arbeit abnhemen, nicht umgekehrt. Dafür gibt es die Dinger ja.
Du sollst also nicht dem Computer schon alles so weit wie möglich vorkauen. Trotzdem ist es ja auch in deinem Interesse, dass dein Programm möglichst flott läuft, oder?
Man muss also einen Kompromiss finden. Ich gestehe, ich möchte meine Programme möglichst flotter als flott haben. Jedoch möchte ich diesen Gedanken nicht anderen, z. B. dir aufzwängen, denn jeder programmiert so, wie es ihm am besten gefällt.

Als Einsteiger, so wie dir würde ich trotzdem empfehlen, so zu programmieren, wie es dir gefällt. Z. B. würde ich an deiner Stelle eher so arbeiten, dass der Code (für dich) schön verständlich und übersichtlich ist.

> mich darauf hinwissen wirds wohl wichtig sein, oder?
Nun, wie gesagt: Stell dir vor, du benutzt ein AntiViren Programm. Da möchtest du schon, dass der sich beeilt, oder?
Fazit: ich finde, Geschwindigkeit ist schon wichtig, aber nicht das Wichtigste. Übersichtlichkeit des Codes, Verständlichkeit, Stabilität des Programms gehen vor.

> Nur, ich dachte ich Frag mal nach.
Das ist richtig, Frag immer weiter, gerade als Einsteiger. :allright:

> Weiter weis ich nicht wo die Variabeln von und bis deklariert werden müssen und wie es gemacht werden soll mit welcher art von Variable
Ist jetzt nicht böse gemeint, aber weißt d schon was Prozeduren sind? Ja, oder?
Eine Prozedur ist eine Funktion, die selbst programmierten Code enthält. Dieser Code lässt sich an anderen Stellen im Programm so aufrufen, als wäre es ein einziger Befehl. Ein naheligender Grund, Prozeduren zu benutzen, ist also, um Schreibarbeit zu sparen.

Bleiben wir beim Beispiel "Zufallszahl zwischen 2 und 10". Statt überall im Programm zu schreiben:

Code: Alles auswählen

Random(8)+2
kannst du von nun an den Befehl

Code: Alles auswählen

ZufallszahlBereich(2, 10)
benutzen. Das ist doch praktischer, nicht?
Vorteil 1: Die Prozedur nimmt dir die Denkarbeit ab. Du brauchst nur den Bereich zu definieren, in dem die Zufallszahl liegen soll.
Vorteil 2: Du brauchst nicht immer Random() zu benutzen. Diese Prozedur ist universell, das heißt: Du kannst mit ihr nicht nur Zufallszahlen von 2-10, sondern auch von 3-15 oder 4-20 berechnen lassen. Alles was du tun musst, ist lediglich den Bereich anzugeben:

Code: Alles auswählen

ZufallszahlBereich(3, 15)
ZufallszahlBereich(4, 20)
ZufallszahlBereich(1000, 2000)
Bei dieser Prozedur brauche ich keine weiteren Variablen, deshalb muss ich auch keine weiteren Variablen deklarieren.
Die Variablen 'von' und 'bis' sind bei der Procedure automatisch deklariert, und zwar von Typ .l (Long) und als Protected. Was diese beiden Dinge heißen, kannst du ja in der Hilfe nachlesen. von und bis sind Parameter, und Parameter sind immer automatisch "Protected". Das ist in diesem Fall etwas... naja, wie soll ich es sagen... "schwerer" zu verstehen, ich weiß.

Vielleicht kann ich es dir an diesem Beispiel deutlich machen. Ich speichere die Zufallszahl innerhalb der Prozedur erst in einer anderen Variable zwischen, bevor ich sie zurückgebe:

Code: Alles auswählen

Procedure ZufallszahlBereich(von, bis)
   Protected Zahl Random(bis-von)+von
   ProcedureReturn Zahl
EndProcedure
Hier muss nur ausdrücklich Zahl als Long und Protected deklariert werden, mit den Parametern von und bis geschieht dies automatisch. Da bei der Variablendeklaration Long der Standardtyp ist, muss man .l nicht extra hinschreiben, kann man aber zur beseren Übersicht.
In diesem Beispiel ist es aber nicht nötig, die Zufallszahl erst noch zwischenzuspeichern. Dies sollte ja auch nur zur Verdeutlichung sein.

> Auch ist mir nicht klar wie ich dieses Macro, wo aufrufe?
Wie ich bereits schrieb, du kannst das Macro genauso wie eine Prozedur aufrufen. Stell das Macro einfach irgendwo am Anfang deines Codes ab.
Zum Aufruf des Macros genügt -wie bei der Procedure- ein einfaches

Code: Alles auswählen

ZufallszahlBereich(2, 10)
.

Ich schireb ja bereits, du merkst den Unterschied beim Programmieren nicht direkt. Der Unterschied liegt eben darin, dass Macros vom Compiler beim Kompilieren ersetzt werden und dadurch den Code schneller machen, denn eine Prozedur muss erst noch aufgerufen werden.



Ich hoffe, ich konnte die vieles klarer machen. Es macht mir Spaß, zu sehen, wie du dich freust! Ehrlich! :allright:

Verfasst: 30.04.2007 15:14
von AND51
Oh, da kamen ja während ich die ganze Zeit schireb, einige neue Posts hinzu. Um auf diese zu Antworten, genehmige ich mir mal einen 2. Post (wegen der Übersicht). (Ich weiß, soll man ja eigentlich nicht machen, trotzdem.)


> Beim Macro ist dem AND51 ein Fehler unterlaufen.
Oh, duli, das tut mir leid. Du hast Recht, der Code, den du verbessert hast, ist richtig! Der Fehler ist mir unterlaufen, weil ich fahrlässigerweise einfach nur die Copy&Paste Funktion benutzt und dann den Inhalt des vermeintlichen Macros geändert habe. Ich vergaß, Procedure in Macro umzubennen.

Bitte nimm den Code von DerProgger, der ist richtig.

Es freut mich aber sehr, dass du es geschafft hast, selbstständig den Code zu verbessern! :allright:


> Ich bin geplättet, wisst ihr, so langsam raucht mein Gehirn, aber es macht spass.
Hehe, wer hätte das gedacht? :lol:

> Was ich nicht verstehe wieso weis der den das a zwei Werte enthält
Das ist nicht richtig. 'a' enthält immer nur einen Wert.

> jetzt müssten doch in der Variable a die Werte 5 und 30 sein oder?
Auch nicht. Siehe weiter unten für die Erklärung.

> Danke für die Hilfestellung, ich glaube jetzt dämmert es mir, muss es noch etwas garren lassen.
Auf jeden Fall! Das ist wirklich ernst gemeint, bitte nimm dir nicht zu viel vor. Sonst passiert es möglicherweise, dass du die ein oder andere Sache wieder vergisst!


Erklärung, warum a nur einen Wert enthält und nicht zwei:
Die anderen haben ja schon versucht, es dir zu erklären, ich versuche es auch einfach mal.


Du musst dir jeden Befehl und jede Procedure als einen Kasten vorstellen. Dieser Kasten hat oben Löcher (1 Loch = 1 Parameter) und unten ein Loch. Die oberen Löche sind die Parameter, in unserem Beispiel hat der Kasten oben 2 Löcher: 'von' und 'bis'.
Das untere Loch eines Befehls oder einer selbstgebauten Procedure dient immer demselben Zweck: Da kommt das "Ergebnis" der Prozedur raus.

Hier mal ein selbstgemaltes Bild dazu:
BildArbeitsweise einer Procedure

Wie gesagt, stell dir die Prozedur als Kasten vor.
  • Oben wirfst du zwei Parameter rein. In unserem Fall 'von' und 'bis'.
  • Du hörst, wie die Parameter in den Kasten plumpsen. Dann wird daran rumgeschraubt und rumgewerkelt.
  • Wenn de Procedure fertig ist, liegt das Ergebnisvr und wird mit ProceureReturn zurückgegeben.
  • Jetzt kommt der Pfeil, der nach unten links eine Kurve macht. Er soll verdeutlichen, dass der Wert, der aus dem Kasten kommt, in a gespeichert werden soll.
  • Wenn du jetzt a debuggen lässt, wirst du sehen, es ist nur ein Wert. Es kann ja auch nur ein Wert sein, warum? Weil der Kasten an der Unserseite doch nur 1 Loch hat!!

Verfasst: 30.04.2007 15:24
von duli
Ja es dämmert, und ich ahne, aber wissen ist zuviel gesagt. Es ist gut zu wissen das ihr euch für mich Zeit nehmt. Doch ist es nicht ganz einfach wenn in den Befehlen so abkürzungen sind, wo eigentlich mehrere Dinge gleichzeitig geschehen, und als erfahrener Prog.. erkennt man sofort was dort alles drin ist, jedoch ich bin schon wenn es ausformuliert wäre echt gefordert. Aber nun habe ich es glaube ich begriffen.

Verfasst: 30.04.2007 15:26
von duli
:mrgreen: Ach ja ich habe noch einen Zweiten Thread hier im Forum laufen wo ich das ganze Programm drin habe.
http://www.purebasic.fr/german/viewtopic.php?t=12805
Danke noch für alles.