Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Befehl Programm auf Ursprungszustand zurücksetzen


ChrisCross - Fr 28.09.12 07:18
Titel: Befehl Programm auf Ursprungszustand zurücksetzen
Hallo,

Ich habe ein Kassenprogramm erstellt. Es speichert viele Werte vielen Variablen. Am Schluss nach dem Bezahlvorgang soll das Programm nach klick auf einen Button von vorne beginnen. Leider müsste ich alle Variablen den Wert 0 zuweisen. Ich habe jetzt das so eingebaut: close; und dann das Programm erneut aufgerufen, damit alle Variablen gelöscht sind. Kennt jemand einen Befehl der das Programm in den Ursprungszusatzt nach dem Kompelieren zurücktsetzt (Variablen sind noch keine Werte zugewiesen)?

Danke


bummi - Fr 28.09.12 07:48

Ich würde in diesem Fall zum Aufräumen raten, vermutlich gibt es zu viele globale oder Klassenvariablen, wo es einfache Stackvariablen auch tun würden, möglicherweise noch verstreut im ganzen Programm.
Wenn Du mit Kassenvaribalen arbeitest könntest Du gegf. einfach die Klassen freigeben und neu erstellen.


Delete - Fr 28.09.12 08:58

user profile iconChrisCross hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe ein Kassenprogramm erstellt. Es speichert viele Werte vielen Variablen. Am Schluss nach dem Bezahlvorgang soll das Programm nach klick auf einen Button von vorne beginnen. Leider müsste ich alle Variablen den Wert 0 zuweisen. Ich habe jetzt das so eingebaut: close; und dann das Programm erneut aufgerufen, damit alle Variablen gelöscht sind. Kennt jemand einen Befehl der das Programm in den Ursprungszusatzt nach dem Kompelieren zurücktsetzt (Variablen sind noch keine Werte zugewiesen)?


1. Ist dein Kassenprogramm etwa ein Konsolenprogramm? Wenn ja, warum machst du keine richtige Windows-Anwendung?

2. Variablen-Werte sind im Grunde immer definiert, auch wenn du deine Variablen nicht initialisierst. Das bedeutet:
a) Auch wenn du deinen Variablen keinen Ausgangswert mitgibst – das nennt sich Initialisierung –, zeigen diese Variablen beim Abruf irgend einen Wert an. Variablen-Bezeichner zeigen im Grunde immer auf eine bestimmte Speicherstelle, in der der Wert der Variablen steht. Diesen Zeiger besitzen sie auch, wenn du sie nicht initialisierst.
b) Man sollte seine Variablen niemals in einem nicht-initialisierten Zustand belassen.

3. Es zeugt von einem ganz ganz schlechten Programmierstil, irgend einen Programm-Reset durch den Neustart des gesamten Programms herzustellen. Damit zeigst du der Programmierer-Gemeinde hier eigentlich nur, daß du so gut wie keine Ahnung vom Programmieren hast.

4. Bitte zeige uns doch einmal, was du da programmiert hast. Erst dann können Forenmitglieder auch erkennen, worum es wirklich geht und dir gegebenenfalls wertvolle Hinweise liefern, worauf du achten mußt.


ChrisCross - Fr 28.09.12 15:37

Ich bin jetzt dabei, meinen Quellcode zu strukturieren. Hier ersteinmal das "alte Programm":


Delete - Fr 28.09.12 17:01

user profile iconChrisCross hat folgendes geschrieben Zum zitierten Posting springen:
Hier ist mein komplettes Programm.


Hab ich mir angeschaut. So einen Schrott möchte ich weder kommentieren noch korrigieren. Das "Programm" ist hoffnungslos.


ChrisCross - Fr 28.09.12 17:10

user profile iconPerlsau hat folgendes geschrieben Zum zitierten Posting springen:
Hab ich mir angeschaut. So einen Schrott möchte ich weder kommentieren noch korrigieren. Das "Programm" ist hoffnungslos.


Sage das mal meinem Informatiklehrer. Wir haben es im Unterricht zusammen programmiert und sollten es zu Hause verbessern. Außerdem habe ich erst vor drei Tagen mit Delphi angefangen.


Delete - Fr 28.09.12 17:34

Moderiert von user profile iconNarses: Komplett-Zitat des letzten Beitrags entfernt.

Sag es ihm selber. Ich sehe nicht ein, hier die Arbeit eures Lehrers zu machen, und dann auch noch ganz ohne Bezahlung, Urlaubs- und Rentenansprüche. Wenn dein Informatik-Lehrer nicht mehr drauf hat, soll er den Beruf wechseln oder den Informatik-Unterricht fähigeren Kollegen überlassen.

An dem Programm gibt's in der Tat nichts zu verbessern, das muß man neu schreiben. Schau dir zum Vergleich einmal einen halbwegs professionellen Quellcode [http://www.pcheil.de/Site/BildToPDF.htm] an. Schau dir diverse Programmier-Richtlinien an. Der Erfolg beim Programmieren hängt neben den Kenntnissen der Programmiersprache nämlich zu einem großen Teil davon ab, daß man

1. seinen Code lesbar und verstehbar formatiert:
Richtlinien zur Formatierung von Delphi Code [http://delphi.programmieren.vias.org/dkk_progstyle_guide.html]

2. die Oberfläche bzw. die Bedienerführung sauber und ansprechend gestaltet:
Richtlinien Layout [http://uwe-sauerland.de/richtlinien/Layout.html]

3. so programmiert, daß man sich damit nicht selber Fallen stellt oder Erweiterungen verunmöglicht:
Richtlinien Programmierstil [http://uwe-sauerland.de/richtlinien/Programmierstil.html]

4. seinen Code konsequent kommentiert, so daß man ihn auch noch nach Wochen/Monaten/Jahren versteht:
Richtlinien Kommentare [http://uwe-sauerland.de/richtlinien/Kommentare.html]

5. aussagefähige Bezeichner für Variablen wählt, so daß man beim Lesen eines Variablen-Namens sofort "ahnt", welche Aufgabe diese Variable zu erfüllen hat:
Richtlinien Namensgebung [http://uwe-sauerland.de/richtlinien/Namengebung.html]

Übrigens: Nach drei Tagen der Beschäftigung mit Delphi solltest du dir auf keinen Fall zutrauen, irgend ein Programm schreiben zu können. Ich empfehle dir, wenn du wirklich Delphi lernen willst und nicht nur auf eine gute Benotung scharf bist, um deinen Notendurchschnitt anzuheben, entsprechene Grundlagen-Tutorials [http://www.delphi-treff.de/tutorials/grundlagen/] durchzuarbeiten. Wenn du zu Hause kein Delphi hast, weil das zu teuer ist, dann installiere dir Lazarus [http://lazarus.intern.es/lazarus_downloads.html] oder CodeTyphon [http://www.pilotlogic.com/sitejoom/index.php/codetyphon/codetyphon-download], damit kannst du wunderbar Delphi erlernen, denn beide sind kostenlos.


Delphi-Laie - Fr 28.09.12 19:20

user profile iconChrisCross hat folgendes geschrieben Zum zitierten Posting springen:
Wer mein Programm ansehen will, kann mich ja anschreiben.


Wer möchte denn hier was von wem?

Hinweis für einen Neuling: Programme kann man hier auch veröffentlichen, müssen dann an einen Beitrag angehängt werden (als Anhang "hochladen").


Delete - Fr 28.09.12 19:39

user profile iconDelphi-Laie hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconChrisCross hat folgendes geschrieben Zum zitierten Posting springen:
Wer mein Programm ansehen will, kann mich ja anschreiben.


Wer möchte denn hier was von wem?


Er hatte sein "Programm" angehängt, nach dem Lesen meiner Kritik wieder entfernt. Da schämte er sich wohl, Anfänger zu sein. So kann das nichts werden. Also ob wir nicht alle mal Anfänger waren. Programmieren muß man sich eben hauptsächlich selbst beibringen, das kann einem keiner abnehmen. Und wer dazu keine Lust hat, der lernt's eben nicht.

Ich hatte mir das "Programm" runtergeladen und kurz angeschaut: Keine aussagekräftigen Komponenten- und Variablen-Bezeichner, Textdatei betrachten via Aufruf der mit .txt verknüpften Anwendung (Windows-Editor), auf einem Form zahlreiche tabellenartig angeordnete Buttons und auf einem anderen ebenso zahlreiche tabellenartig angeordnete Editfelder zur Eingabe von Beträgen und Warenbezeichnungen, also im Grunde nur eine Zeichnung, was Zusammengeklicktes ohne nennenswerte Programmlogik, wie man das von einem Menschen ohne Delphi-Kenntnisse zu erwarten hat. Ich konnte auch keinen Hinweis finden, womit er denn nun eigentlich Probleme hatte. Nach drei Tagen Beschäftigung mit Delphi ist es ja auch kein Wunder, daß er glaubte, er müsse das Programm neu starten, um die Editfelder zu leeren ...

Und natürlich erwartete er, daß man ihm den Code schreibt, damit er eine bessere Note erhält. Ich konnte keine Bereitschaft erkennen, sich in die Programmierung mit Delphi einzuarbeiten. Du kennst das ja, kommt hier immer wieder mal vor ... verzogene Jugendliche eben, die schnell erschrecken, wenn man ihnen etwas konkreter kommt. Gab aber schon um einiges Schlimmere hier, die sofort pampig wurden, da ist die arrogante Feststellung, daß man ihn anschreiben soll, wenn man sein Programm ansehen will, ja noch fast als harmlos einzustufen :twisted:


bummi - Fr 28.09.12 19:50

Für mein Empfinden etwas heftig die Reaktionen :cry:


haentschman - Fr 28.09.12 20:09

@Perlsau:

...du lehnst dich ganz schön aus dem Fenster. Kommst du auch mit Kritik in deine Richtung klar ? Wollen wir mal deinen Quellcode zerpflücken ?

Ich fange mal an:
1. du predigst Styleguide und rückst 5 Zeichen (Tabulator) ein
2. merkwürdige Einrückungen der := z.B.
3. deine GUI ist Geschmackssache aber nicht konsistent (mal große, mal kleine Buttons)
4. merkwürdige Großschreibung (manchmal aber auch klein)

...wird fortgesetzt.

:roll:


mandras - Fr 28.09.12 20:35

Gestern war das Programm noch da, heute hatte ich etwas Zeit es mir anzusehen und es ist weg.

Ich werde nun nicht den Autor anschreiben aber ein wenig neugierig bin ich doch warum das Programm solche Reaktionen auslöst.
Vor allem - falls es im wesentlichen vom Informatiklehrer stammt.

Chris, stell' es einfach nochmal ein ich denke es wäre für manche hilfreich sich ein eigenes Urteil zu bieten, evtl. auch über die Qualität des Informatik-Unterrichts (bei mir liegt das über 20 Jahre zurück...)


glotzer - Fr 28.09.12 21:14

(ja ich weiß ,dass das Offtopic ist, gerne in anderen Thread auslagern)

Informatik "Untericht" kann man das was man auf einer normalen deutschen Schule bekommt nicht nennen.
der Leerplan [http://www.isb.bayern.de/isb/index.asp?MNav=6&QNav=4&TNav=0&INav=0&LpSta=6&STyp=14&Fach=27] ist ja noch halbwegs ok, aber die Umsetzung (wenigstens bei uns) ist ein Witz.
2/3 der Lehrer haben von einem PC ungefähr das Wissen was man durchs lesen der Bedienungsanleitung hat, und die sollen dann den Schülern etwas beibringen.
Alles in allem sieht das dann so aus:
5-7: Bedienung von Word,PowerPoint,Paint etc
7-8: "Programieren" lernen, bei uns war das Robot Karol (-> google), von den Schülern hat da keiner wirklich etwas verstanden, der Lehrer noch weniger.
8-9: Tabellen in Excel mit Formeln etc, wehe man verwendet irgendeine Funktion die der Lehrer nicht kennt, dann ist erstmal 2 Stunden diskutieren angesagt ob das denn überhaupt in Ordnung ist, obwohl es bestens funktioniert. Später dann extrem einfaches SQL, eigentlich nur ein bisal rumspielen, wenn man Sachen wie "COUNT (*)" verwendet, wusste der Lehrer schon nicht mehr was los ist...
10: Java, die einfachsten Sachen, hier hatten wir aber wenigstens das erste mal einen Lehrer der von Informatik mehr wusste als das was man in dieser und der nächsten Stunde durchnehmen will.
Q11: noch mehr Java, eigentlich nur Datenstrukturen, Verkettete Listen, Bäume etc.
Q12: Rechner Theorie (Turingmaschine, Kellermaschine etc)

Mit das größte Problem sind meiner Meinung nach hier aber die Lehrer die sehr oft Deutschlehrer mit kurzer zusatzausbildung sind. (ich erinner mich an einen bestimmten der in der 7. Klasse 2 Stunden damit verbracht hat wie man sich am PC anmeldet während die schüler Flash Games gezockt haben...)

Wenn bei soetwas schon mal irgendetwas rauskommt was der Compiler frisst ist es schon ein Wunder...


Mathematiker - Fr 28.09.12 21:53

Hallo Glotzer,
user profile iconglotzer hat folgendes geschrieben Zum zitierten Posting springen:
(ja ich weiß ,dass das Offtopic ist, gerne in anderen Thread auslagern)

Hier sind wir uns fast einig! Allerdings ist diese Diskussion mehr als flüssig, sie ist überflüssig, da immer wieder geführt. :?
user profile iconglotzer hat folgendes geschrieben Zum zitierten Posting springen:
Informatik "Untericht" kann man das was man auf einer normalen Deutschen Schule bekommt nicht nennen.

Aha. :?!?: Jeder, der irgendwann einmal in irgendeiner Schule war, kann natürlich über die "Deutsche Schule" (warum Deutsch groß?) qualifiziert mitreden, also jeder!
Und deshalb schlussfolgerst Du
user profile iconglotzer hat folgendes geschrieben Zum zitierten Posting springen:
Mit das größte Problem sind meiner Meinung nach hier aber die Lehrer ...

Na endlich! Ich habe schon darauf gewartet!
Kann sich ein Abiturient den eigenen Namen nicht merken, pinkelt ein Zehnklässner noch ein oder halten pubertierende Schülerinnen Pythagoras für eine ansteckende Krankheit dann ist der Lehrer schuld. :motz:
Er ist an allem schuld, auch an der Sintflut, der globalen Erwärmung und dass Kenny (fast) jede Folge sterben muss.
Es reicht! Höre endlich auf, alles auf uns(!) Lehrer zu schieben. :twisted:
Die wahre Ursache für die katastrophalen Schulsituationen ist die Bildungspolitik!
user profile iconglotzer hat folgendes geschrieben Zum zitierten Posting springen:
ja, ich schreibe grundsätzlich alles klein und meine rechtschreibfehler sind absicht

Es fehlt nur noch, dass auch daran Dein Deutschlehrer schuld ist.

Beste Grüße
Mathematiker


glotzer - Fr 28.09.12 23:05

Hallo Mathematiker,
"irgendwann" ist gut, das vergnügen hab ich leider noch immer. Allerdings befürchte ich das mein letzter post nicht sooooo gut
formuliert war und du vieleicht etwas in den falschen Hals bekommen hast, das tut mir leid. Mein Post war ein keiner weiße beleidigend gegenüber den Lehrern gemeint, das sind auch nur arme Schweine die ausbaden müssen was wo anders schief gelaufen ist. Aber in sachen Lehrer ist es leider wahr: es gibt zu wenig Info Lehrer. Bei uns gibt es 5 Info Lehrer, wovon 3 Deutschlehrer mit Zusatzkurs und einer Physik Lehrer ist. Nur einer ist wirklich ein Informatik Lehrer. Dafür können diese Leute nichts und es ist auch nicht beleidigend gemeint.

Aber wie ich vieleicht schon früher hätte schreiben sollen: das ist NUR meine persönliche Meinung und muss in keiner weiße die Tatsachen wiederspiegeln.

Allerdings wird das langsam so offtopic, dass wir das wohl besser in PMs weiter machen. Falls da Interesse von dir besteht, gerne anschreiben ;)


ChrisCross - Mi 03.10.12 12:24

Ich wollte meine Frage noch einmal besser stellen:

Wenn man auf den entsprechenden Button klick wird in der nächsten Form der Preis ausgegeben. Dieser wird dann zusammengerechnet und ausgegeben. Am Ende müsste ich aber
50 x label1.caption := 0,00; usw. schreiben, damit alle Preise erstmal 0,00 Euro sind, bis zum Buttonklick. Deshalb habe ich das Programm beendet und wiederhohlt. Gibt es eine bessere und einfachere Möglichkeit?


jaenicke - Mi 03.10.12 12:30

Suchst du vielleicht FindComponent? ;-)


ChrisCross - Mi 03.10.12 12:35

Danke. Genau das habe ich gesucht! :D


Mathematiker - Mi 03.10.12 12:45

Hallo ChrisCross,
ich habe mir Dein (wieder vorhandenes) Programm angesehen.
Unabhängig vom Tip Jaenickes sehe ich noch mehrere Probleme.
Mein erster Vorschlag wäre, dass Du die vielen Variablen zaehler zu einem Feld zusammenfasst:

Delphi-Quelltext
1:
var zaehler:array[1..48of integer;                    

Damit hast Du auch die Möglichkeit, alle zaehler-Variablen auf 0 zu setzen, z.B.

Delphi-Quelltext
1:
for i:=1 to 48 do zaehler[i]:=0;                    

Die Grundinitialisierung dieser Variablen fehlt ohnehin. Bei einem Programmstart glaubst Du, dass alle Integer-Variablen gleich Null sind, dass muss aber nicht sein. Deshalb sollte die von mir genannte Schleife in der Activate-Methode Deines Fensters stehen.
Ähnliches gilt für die vielen Variablen Menge, Menge_r, Preis und Preis_r. Änderst Du dies auf Felder, so wird es wesentlich übersichtlichter.
Und all diese Felder kannst Du anschließend mit einer einzigen Methode schnell wieder auf 0 setzen.
Weiterhin: Für die Eingabezeilen in der Form2 könnte ich mir auch eine Komponente TStringgrid vorstellen. Deren Eingabezellen kannst Du dann über die Zeilen- und Spaltennummer ansprechen und reduzierst so den Quelltext erheblich.

Auf Jaenickes Hinweis zu FindComponent kam von Dir:
user profile iconChrisCross hat folgendes geschrieben Zum zitierten Posting springen:
Danke. Genau das habe ich gesucht! :D

Außerdem hast Du Deine Frage als "gelöst" markiert. :?!?: Ich glaube nicht, dass FindComponent alle Probleme Deines Programms löst.

Übrigens ist es mir nicht gelungen, Deinen Quelltext zu übersetzen. Irgendetwas stimmt mit der dfm-Datei der Unit4 nicht.

Beste Grüße
Mathematiker


jaenicke - Mi 03.10.12 15:02

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Die Grundinitialisierung dieser Variablen fehlt ohnehin. Bei einem Programmstart glaubst Du, dass alle Integer-Variablen gleich Null sind, dass muss aber nicht sein.
Doch, wenn es sich um Felder des Objekts oder globale Variablen handelt. Die werden vom Compiler mit 0 bzw. nil usw. initialisiert. Das ist dokumentiertes Verhalten, deshalb kann man sich darauf auch verlassen.
http://docwiki.embarcadero.com/RADStudio/XE3/de/Variablen hat folgendes geschrieben:
Wenn Sie eine globale Variable nicht explizit initialisieren, wird sie vom Compiler mit 0 initialisiert. Objektinstanzdaten (Felder) werden auch mit 0 initialisiert. Auf der Wiin32-Plattform ist der Inhalt von lokalen Variablen so lange undefiniert, bis ein Wert zugewiesen wird.


ChrisCross - Mi 03.10.12 18:08

Zitat:
Ich glaube nicht, dass FindComponent alle Probleme Deines Programms löst.


Es hat meine Frage gelöst, und deshalb habe ich sie als "gelöst" makiert, trozdem Danke für dein bemühen.


Mathematiker - Mi 03.10.12 19:31

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Die Grundinitialisierung dieser Variablen fehlt ohnehin. Bei einem Programmstart glaubst Du, dass alle Integer-Variablen gleich Null sind, dass muss aber nicht sein.
Doch, wenn es sich um Felder des Objekts oder globale Variablen handelt. Die werden vom Compiler mit 0 bzw. nil usw. initialisiert. Das ist dokumentiertes Verhalten, deshalb kann man sich darauf auch verlassen.

Du hast natürlich recht. Es sind ja globale Variablen.
Meine Angewohnheit, alles selbst zu initialisieren, stammt noch aus alten Pascal-Zeiten. "Liebgewordenes" kann man einfach schlecht ablegen. :autsch:
Für ChrisCross' Programm ist es beim Erststart nicht notwendig. Wenn er das Programm nicht ständig neu starten will, wird er aber um die Initialisierung seiner Variablen kaum herumkommen.
Beste Grüße
Mathematiker