Autor Beitrag
Crawfish
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Fr 07.02.03 18:18 
Moin!
Wir arbeiten in Informatik mit Delphi und sollen als Hausaufgabe eine Ampel programmieren. Ich habe das jetzt so hinbekommen, dass die Ampel einmal richtig durchläuft. Nun muss sie aber öfter durchlaufen und dazu muss ich denk ich mal eine Schleife machen, und damit dies keine endlosschleife wird, soll sie erst wieder anfangen, wenn im letzten timer eine variable richtig gesetzt wurde. Soweit verstanden?

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
label StartHere;

begin
 fertig:='a';

while fertig='a'  do
     begin
     fertig:='b';
     timer1.enabled:=true;
     timer2.enabled:=true;
     timer3.enabled:=true;
     timer4.enabled:=true;
     timer5.enabled:=true;
    
     end;
   goto StartHere;



In Timer 5 wurde die Variable fertig auf b gestellt. Nun meine Frage: Wie setze ich das Label richtig. So, wie es im Moment ist sagt er mir "Label wurde deklariert und referenziert, aber nicht gesetzt".

Vielen Dank im Voraus!

Crawfish
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Fr 07.02.03 18:42 
*lol* wer hat dir den den floh ins ohr gesetzt, dass mit labels machen zu wollen :arrow: BENUTZE NIEMALS LABELS :twisted: Sonst müssen wir noch'n exorzisten rufen :wink:

Der code sieht 'n bisschen merkwürdig aus, weil die schleife immer genau einmal durchlaufen wird. Dies ist genau das selbe:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
     fertig:='b'; 
     timer1.enabled:=true; 
     timer2.enabled:=true; 
     timer3.enabled:=true; 
     timer4.enabled:=true; 
     timer5.enabled:=true;


Mach doch einfach im letzten timerEvent alle anderen timer wierder auf true. Ergo haste eine schleife

viel spass.
Crawfish Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Fr 07.02.03 18:46 
Also das mit den Labels war die Delphi-Hilfe (Delphi 5).

Ich versuchs mal und melde mich dann. Danke!

Crawfish
Crawfish Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Fr 07.02.03 18:51 
Ja es geht! Danke nochmal. Muss nur noch einen Stopp-Button proggen. Aber das krieg ich auch noch hin.

Crawfish
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 07.02.03 21:13 
maximus hat folgendes geschrieben:
BENUTZE NIEMALS LABELS

Warum nicht?
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 07.02.03 21:21 
Titel: PS!
Ach so, damit wir uns nicht falsch verstehen (und um evtl. Zensur vorzubeugen):

Ich habe z.B. ein Programm, dass im Hintergrund läuft und in einstellbarer Zeit auf mein POP3-Postfach zugreift und nach Mails checkt.
Du weißt, wie das läuft? Du meldest dich an, sendest Mailadresse, Passwort, usw. usw.

Im Fehlerfall (wenn eine Verbindung steht, aber nicht das gewünschte zurückliefert), sollte man die Verbindung nicht einfach bloß kappen sondern sich auch ordnungsgemäß am Server abmelden.

Nun müsste ich also für jedes evtl. auftretende Problem diese Abmelderoutine schreiben (sprich: "QUIT" senden) und dann die Prozedur verlassen.

Fazit: Ich habe ein Label definiert, dass ich kurz und ergreifend anspringe. Ich halte das -in diesem Fall, zugegeben!- für den besten Weg, denn das o.g. Kommando "QUIT" muss ich auch im Erfolgsfall senden, um die Verbindung zum Server zu schließen.
Der Code ist also vorhanden, steht nur etwas weiter hinten in der Prozedur. Darum das Label, und ich spare jede Menge Codezeilen.

Sag also bitte niemals NIEMALS. :)

btw: Das ist ein non-VCL-Programm. Ich muss also die Verbindung zum Server aufnehmen und die notwendigen Kommandos, da es ohne VCL keine Komponenten gibt, die mir diese Arbeit abnehmen würden. Schöner Nebeneffekt: das Programm ist 31k groß.
Also, dafür benutze ich gern mal ein oder zwei Labels. :wink:
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Fr 07.02.03 21:27 
Ausnahmen bestätigen die Regel. Und der Zweck heiligt die Mittel. Aber prinzipiell sollte wirklich gelten: YOU SHALL NOT USE LABELS!. Ist unschöner - und zugegeben manchmal trotzdem sinnvoller - Programmierstil.

@Mathias: nur, damit Du Dir nicht auf den Schlips getreten fühlst: es gibt vieles, was ich als unschönen Programmierstil empfinde, aber trotzdem selbst ab und zu benutze. Wenn ich also von schlechtem Programmierstil spreche, ist das kein Zeichen der Geringschätzung oder so.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 07.02.03 23:00 
Für ernsthafte Kritik bin ich immer zu haben, und da lasse ich mich auch gern eines Besseren belehren. Insofern fühle ich mich nicht auf den Schlips getreten. Im Gegenteil: ein offenes Wort ist mir lieber. :)
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Fr 07.02.03 23:26 
Zitat:
Im Gegenteil: ein offenes Wort ist mir lieber.
Das finde ich prima!

zurück zu den Labels:
Ich schätze Delphi gerade aufgrund seiner klaren und sehr gut strukturierten Quellcodes. Wenn man Labels und Goto in Maßen und mit dem richtigen Fingerspitzengefühl (im wahrsten Sinne des Wortes, wie ich gerade bemerke :wink: ) einsetzt, bleibt der auch erhalten.
Dieses Fingerspitzengefühl hat man jedoch noch nicht, wenn man Delphi gerade in der Schule lernt. Und gerade dann (also wenn man Delphi lernt) wird der Programmierstil am meisten geprägt. Und deshalb sollte man zu diesem Zeitpunkt unbedingt noch sagen: "Keine Labels".

Und zu einem späteren Zeitpunkt gibt es bestimmt ein paar Fälle, in denen ein Label wirklich sinnvoll ist. Man muss (meiner Meinung nach) nur darauf achten, dass eine klare Programmstruktur, bei der der Programmablauf so klar ist wie auch sonst in Delphi, erhalten bleibt. Ein Delphiprogramm sollte auf gar keinen Fall zu einer Spaghetti-Programmierung werden.

Ist natürlich eine sehr persönliche Einschätzung, aber wenn es um Programmierstil geht, ist das wie mit dem Geschmack: da hat jeder seinen Eigenen.

MfG,
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 08.02.03 09:23 
Peter Lustig hat folgendes geschrieben:
Wenn man Labels und Goto in Maßen und mit dem richtigen Fingerspitzengefühl (im wahrsten Sinne des Wortes, wie ich gerade bemerke :wink: ) einsetzt, bleibt der auch erhalten.

Das denke ich auch; kleines Beispiel:
ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
    s := socket(AF_INET,SOCK_STREAM,0);

    if(s <> INVALID_SOCKET) then
    try
      ZeroMemory(@saddr,sizeof(TSockAddr));
      saddr.sin_addr.S_addr := dwIp;
      saddr.sin_family      := AF_INET;
      saddr.sin_port        := htons(pop3port);

      // connect to server
      res := connect(s,saddr,sizeof(saddr));
      if(res = SOCKET_ERROR) then goto SocketCloseJump;

      // check server status
      ZeroMemory(@rbuf,sizeof(rbuf));
      res := recv(s,rbuf[0],sizeof(rbuf),0);
      if(res = SOCKET_ERROR) then goto SocketCloseJump;

      if(rbuf[0] <> '+') then goto SendQuit;

      // send user name
      res := sendPop3Cmd(s,'USER ' + pop3user);
      if(res = SOCKET_ERROR) then goto SocketCloseJump;

      ZeroMemory(@rbuf,sizeof(rbuf));
      res := recv(s,rbuf[0],sizeof(rbuf),0);
      if(res = SOCKET_ERROR) then goto SocketCloseJump;

      if(rbuf[0] <> '+') then goto SendQuit;

      // send password
      res := sendPop3Cmd(s,'PASS ' + pop3pwd);
      if(res = SOCKET_ERROR) then goto SocketCloseJump;

      ZeroMemory(@rbuf,sizeof(rbuf));
      res := recv(s,rbuf[0],sizeof(rbuf),0);
      if(res = SOCKET_ERROR) then goto SocketCloseJump;

      if(rbuf[0] <> '+') then goto SendQuit;

       // mehr POP3-Sachen, die ich aber nicht verrate
       // :o)
      { ... }

SendQuit:
      // close POP3 server
      res := sendPop3Cmd(s,'QUIT');
      if(res = SOCKET_ERROR) then goto SocketCloseJump;

      ZeroMemory(@rbuf,sizeof(rbuf));
      res := recv(s,rbuf[0],sizeof(rbuf),0);

SocketCloseJump:
    finally
      CloseSocket(s);
    end;

Ich glaube, so furchtbar ist es trotz der zwei Labels nicht. Oder?

Zitat:
Dieses Fingerspitzengefühl hat man jedoch noch nicht, wenn man Delphi gerade in der Schule lernt. Und gerade dann (also wenn man Delphi lernt) wird der Programmierstil am meisten geprägt. Und deshalb sollte man zu diesem Zeitpunkt unbedingt noch sagen: "Keine Labels".

Das ist ein Argument, dem ich mich nicht verschließen kann!
:)

Gruß.
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Sa 08.02.03 12:52 
Darf ich hier ein kleines Zitat aus meinem PowerBASIC-Buch ins Spiel bringen, Kapitel 7 "Kontrollstrukturen", Erscheinungsjahr 1993:
Kirschbaum Software hat folgendes geschrieben:

GOTO ist die einfachste Kontrollstruktur nach der Sequenz. Das GOTO ist ein Dinosaurier und ein fosiiler Vorgänger komplexer und elegenterer Kontrollstrukturen. [...]
Heute (und das war schon vor 10 Jahren!) lehnen viele Programmierer den Gebraauch von GOTOs ab. Damit haben sie Recht, trotzdem ist das GOTO nicht von sich aus schlecht. Ein zu lässiger Umgang mit GOTOs (wenn also von Punkt zu Punkt gesprungen wird, anstatt mit Prozeduren und Funktionen zu arbeiten) führt allerdings zu Verwirrungen beim Programmierer und zu Programmfehlern Außerdem verfügen die modernen BASIC-Dialekte, wie PowerBASIC, über weitaus elegantere Kontrollstrukutren. Von ihrer Funktion her unterscheiden sich GOTOs und alle mordernen Kontrollstrukturen natürlich nicht, sofern sie korrekt eingesetzt werden. Trotzdem gehören GOTOs heute eher zu einem schlechten Programmierstil, weil damit viel Unfug angerichtet wird.

Dann kommt eine Beschreibung aller in PowerBASIC vorhandenen Alternativen, angefangen mit Schleifen über IF/THEN/ELSE-Konstrukte, SELECT CASE-Konstrukte bishin zu EXIT FAR-Konstrukten (eine spezielle Möglichkeit, unbedingte Sprünge zu verhindern, kennt vermutlich keiner hier...). Dannach kommt ein kleiner Abschnitt "Auch das letzte GOTO wird überflüssig". Darin wird beschrieben, daß ein letztes Argument für GOTOs die vereinfachte Verarbeitung ist. Als Beispiel wird ein Scchachspiel herangezogen, in dem das Spielende über GOTOs herbeigeführt wird. Durch ein paar WHILEs mit bestimmten Flags wird daraus ein (IMHO) viel übersichlicheres Programm, vollkommen ohne GOTOs.
Generell wird also schon seit über 10 Jahren davon abgeraten, GOTOs zu verwenden. Der Grund dafür ist, die verantwortungslose Programmierung, da GOTOs bei einigen Programmierern (vermutlich hauptsächlich Scriptkiddies und Anfängern) die Prozeduren und Funktionen und sogar Schleifen ersetzt haben.
Außerdem machen GOTOs in vielen Fällen das Programm unübersichtlicher und in einigen Fällen wäre man mit einer simplen Procedure (oder in BASIC auch mit einem SUB) wesentlich besser davongekommen, mit nur einer Zeile zusätzlichem Code (nämlich ein END SUB...).



MS' Code hätte ich zum Beispiel, als jemand der mit 12 Jahren gelernt hat, ohne GOTOs auszukommen, so gemacht:
ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
procedure Quit;
procedure Close;


    s := socket(AF_INET,SOCK_STREAM,0);

    if(s <> INVALID_SOCKET) then
    try
      ZeroMemory(@saddr,sizeof(TSockAddr));
      saddr.sin_addr.S_addr := dwIp;
      saddr.sin_family      := AF_INET;
      saddr.sin_port        := htons(pop3port);

      // connect to server
      res := connect(s,saddr,sizeof(saddr));
      if(res = SOCKET_ERROR) then Close;

      // check server status
      ZeroMemory(@rbuf,sizeof(rbuf));
      res := recv(s,rbuf[0],sizeof(rbuf),0);
      if(res = SOCKET_ERROR) then Close;

      if(rbuf[0] <> '+') then Quit;

      // send user name
      res := sendPop3Cmd(s,'USER ' + pop3user);
      if(res = SOCKET_ERROR) then Close;

      ZeroMemory(@rbuf,sizeof(rbuf));
      res := recv(s,rbuf[0],sizeof(rbuf),0);
      if(res = SOCKET_ERROR) then Close;

      if(rbuf[0] <> '+') then Quit;

      // send password
      res := sendPop3Cmd(s,'PASS ' + pop3pwd);
      if(res = SOCKET_ERROR) then Close;

      ZeroMemory(@rbuf,sizeof(rbuf));
      res := recv(s,rbuf[0],sizeof(rbuf),0);
      if(res = SOCKET_ERROR) then Close;

      if(rbuf[0] <> '+') then Quit;


procedure Quit;
begin
      // close POP3 server
      res := sendPop3Cmd(s,'QUIT');
      if(res = SOCKET_ERROR) then goto SocketCloseJump;

      ZeroMemory(@rbuf,sizeof(rbuf));
      res := recv(s,rbuf[0],sizeof(rbuf),0);
end;

procedure Close;
begin
    finally
      CloseSocket(s);
    end;
end;


Meiner Meinung nach genauso einfach, man kann von überall den Socket schließen und QUIT senden, egal wo man im Programm gerade ist. Und an übersichtlichkeit hat es ja wohl auch nichts verloren, oder?

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 08.02.03 13:05 
tommie-lie hat folgendes geschrieben:
MS' Code hätte ich zum Beispiel, als jemand der mit 12 Jahren gelernt hat, ohne GOTOs auszukommen ...

Der Satz gefällt mir. :wink: Die Wahrheit ist, seit ich 1991/92 mit TP angefangen habe und von GW-BASIC (MS-DOS 4.xx) weg bin, habe ich nie wieder mit "goto" gearbeitet.

Nur in besagtem Projekt (und im PortScanner) findet sich so ein Label, um mal eben fix ein paar Anweisungen zu "überspringen".

Mir gefällt z.B. nicht, dass du TRY/FINALLY/END aufgetrennt hast. Ob das noch korrekt funktioniert, ist eine andere Sache - ich weiß es nicht, glaube es aber auch irgendwie nicht.
Dann lieber darauf verzichten und vor dem Schließen des Sockets prüfen, ob dieser ungleich INVALID_SOCKET ist.

Nun, wie dem auch sei: bei objektiven Argumenten würde ich nie starrköpfig sein. In dem Fall bleibe ich es aber, :), denn geäußert wurden (auch von mir!) nur subjektive, persönliche Meinung über ein Für oder Wider.

Zitat:
man kann von überall den Socket schließen und QUIT senden, egal wo man im Programm gerade ist.

Hier mein einziger Einspruch: das mag in anderen Programm nützlich sein. In dem speziellen Fall aber nicht. Es gibt nur eine Prozedur, die den Server ansteuert, sich verbindet, nach Post guckt und wieder geht.
Wenn Prozeduren, dann lokale; damit man eben nicht in die Versuchung kommt, den Server von jedem beliebigen Punkt des Programms schließen zu wollen.

Gruß.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 08.02.03 13:19 
@tommie-lie: irgendwie glaube ich nicht, dass Deine Version von Mathias' Programm überhaupt richtig funktioniert, denn es werden ja keine Anweisungen übersprungen, sondern nur welche dazwischen ausgeführt und dann am Ausgangspunkt weitergemacht.

@Mathias: In diesem Spezialfall muss ich sagen, dass die Gotos hier wirklich sinnvoll sind. Außerdem kann es zu keiner Verwirrung kommen, da immer nur genau einmal gesprungen wird, der Programmablauf vollkommen klar bleibt. Da ist wirklich nichts gegen einzuwenden. Sozusagen die Ausnahme, die die Regel bestätigt.

MfG,
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Sa 08.02.03 13:49 
*LOL* Da hab ich ja richtig was losgetreten :shock:

Ich werde niemehr NIEMALS sagen...oder darf ich auch nicht NIEMEHR sagen? aber meine intension war gut, da ich einen anfänger davor bewaren wollte einen grossen fehler zu begehen :D is ja auch alles geklärt!

Zitat:
Die Wahrheit ist, seit ich 1991/92 mit TP angefangen habe und von GW-BASIC (MS-DOS 4.xx) weg bin, habe ich nie wieder mit "goto" gearbeitet.

Geht mir auch so: Seit GW-BASIC hab ich nen hass auf GOTOs und diese schlimmen zeilen-nummerierungen. Was für eine freude ist da doch unser geliebtes PASCAL :)

grüsse. Maximus

PS: Ich kann GOTOs auch nur in extrem situationen gut heissen. Siehe oben 8) Scheint dort einigermassen angebracht zu sein.
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Sa 08.02.03 14:47 
try? finally? überspringen?
Oooops.
Da hab ich nicht richtig aufgepast. Sorry, mein Fehler.
Dann geht meine Methode tatsächlich nicht. Aber vielleicht kann man's so umstrukturieren, daß man trotzdem noch ohne GOTOs auskommt...
Aber das wäre mir für den Augenblick zu viel Arbeit.

btw: Hat man bei GW-BASIC tatsächlich noch Zeilennummern gebraucht? PB hat extra darauf hingewiesen, daß man keine mehr braucht, und der Compiler sie ignoriert, es sei denn man will sie zu Label-Zwecken benutzen. Die Nummern hatten also keine Bedeutung mehr. Da bin ich ja richtig froh, daß ich mit dem Power-Dialekt aufgewachsen bin *g* (wer's übrigens heute noch haben will, kann auf pb.com noch die kostenlose DOS-Version runterladen. Die Windows-IDE kostet allerdings ein entsprechendes Entgeld... Mittlerweile gibt's sogar einen DLL-Compiler für PB!)

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 08.02.03 15:10 
tommie-lie hat folgendes geschrieben:
Aber das wäre mir für den Augenblick zu viel Arbeit.

:D

Zitat:
btw: Hat man bei GW-BASIC tatsächlich noch Zeilennummern gebraucht?

Ja. Aber noch schöner war das alte KC-BASIC vom blinkenden Schuhkarton: dem KC-85 - "super" DDR-Computer. Auf dem Ding haben wir mal ein Programm für einen lokalen Betrieb geschrieben. Eine Präsentation, die -aus heutiger Sicht!- den Namen nicht verdient, aber dennoch funktionierte und den Weg von einem Stückchen ... äh, was war´s eigentlich: Stoff (?) ... zur fertigen Tischdecke zeigte. - Um´s mal zusammenzufassen

Aber meine Note weiß ich noch: eine Eins! 8)
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Sa 08.02.03 17:05 
Und was war nun mit dem KC-BASIC? Was schlimmeres als 1000 Zeilen Code einzelnd zu nummerieren gibt's doch gar nicht, oder?

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 08.02.03 19:16 
Nein, nicht schlimmer. Ich sagte doch: schöner! *seufz* ... Ach ja, die gute, alte Zeit ... :wink:

Aber mal ehrlich -
Wer selbst noch mit BASIC und Zeilennummern hantiert hat, wird doch wohl nicht sagen können, dass es Sch... war? Man war´s nicht anders gewohnt, und ehrlicherweise muss ich zugeben, dass ich beim Umstieg auf TP am Anfang Probleme wg. der fehlenden Nummerierung hatte.

Auf der anderen Seite, natürlich!, hattest du irgendwo eine Sprunganweisung drin und hast noch eine Zeile eingefügt, dann konntest du das ganze Listing durchwühlen und die Sprünge anpassen.


Da wir gerade dabei sind und -durch das Lesen- viele Leute wissen, woher ich komme und wie alt ich wohl sein dürfte ... noch ein Nachschlag. :twisted: Unser ESP-Lehrer (Ossis vor, wer weiß was es heißt? :wink:) gab den BASIC-Kurs nach der Schule. Ich nahm ... *hüstel* ... freiwillig daran teil.

So, nun wisst ihr´s. :roll:
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Sa 08.02.03 19:29 
Ich habe nie mit Zeilennummern angefangen. Hab gleich mit PB angefangen. Ich fand das superklasse (als 12jähriger wohlgemerkt!), daß man da nicht jede Zeile einzeln nummerieren musste, weil ich gehört hatte, daß man das in anderen Programmiersprachen müsste. Später hat sich rausgestellt, daß es nur in den anderen BASIC-Dialekten so war, aber das war mir egal, ich fand's toll, daß ich immer alles mit Buchstaben ausdürcken konnte, und mir keine Tabelle mit Nummern machen musste, in der stand, welche Nummer welcher Ansprungpunkt war, damit ich nicht jedesmal den Quellcode durchsuchen musste.

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Sa 08.02.03 19:33 
tommie-lie hat folgendes geschrieben:
Hab gleich mit PB angefangen.

Und PowerBasic (PB) stammt von TurboBasic ab, das wiederum von Borland entwickelt wurde. (Nachdem Borland TB aufgab, erwarb dir Firma Kirschbaum Software die Linzenz und entwickelte PowerBasic).
Man sieht: Borland Produkte waren damals schon die besseren.

_________________
Ist Zeit wirklich Geld?