Einzelnen Beitrag anzeigen

Popov
(Gast)

n/a Beiträge
 
#62

AW: Große String-Liste out of Memory - Hilfe?

  Alt 22. Apr 2014, 22:30
Als erstes möchte ich dir mal meine Bewunderung aussprechen. Ich bewundere Menschen die sich im Chaos zurecht finden. In dem Fall meine ich die unterschiedliche Tiefeinanordnung von Programmzeilen die zusammengehören. Da ist das Begin ein Tab tief, das dazugehörige End später fünf Tabs tief. Im Nachhinein zu wissen, dass beides zusammen gehört, erfordert ausgeprägtes abstraktes Denken. Das aber nur so nebenbei.

Nochmal zu Goto. Vergiss es. Mir fällt nichts ein wo man Goto benötigt. Ich kenne aber das Problem, denn auch ich hab mit Goto angefangen und brauchte den Klick im Kopf um mich davon zu verabschieden. Früher als es keine Prozeduren gab, konnte man vielleicht nicht anders, aber selbst früher konnte man innerhalb eines Blocks drauf verzichten.

Hier zuerst dein Code, leicht abgepasst zum Testen in einer Prozedur:
Delphi-Quellcode:
var
  I, I2, I3, I4: Integer;
  npw: String;
label
  NichtRekursiv, DasEnde;
begin
  I4 := 0; //zum Test
  NichtRekursiv:

  //npw:= astring[I]+bstring[I2]+cstring[I3]+dstring[I4] ;
  I4 := I4 + 1;
  npw := IntToStr(I4); //als Ersatz

  If I4 = 11 then
  begin
    I3 := I3+1 ;
    I4 := 1 ;
  end;
  If I3 = 27 then
  begin
    I2 := I2+1;
    I3 := 1;
  end;
  If I2 = 11 then
  begin
    I := I+1;
    I2 := 1;
  end;
  If (I = 27) then
  begin
    Goto DasEnde ;
  end;

  showmessage (npw);

  Goto NichtRekursiv ;

  DasEnde:
  showmessage ('Ende');
end;
Die Goto NichtRekursiv ; ist sehr gefährlich. Du baust hier eine Endlosschleife in dein Programm rein. Zwar gibt es das Goto DasEnde ; als Ausgang, das kann man aber eleganter mit repeat lösen (meiner Meinung nach).

Hier etwas vergleichbares, aber mit repeat.
Delphi-Quellcode:
var
  I, I2, I3, I4: Integer;
  npw: String;
begin
  I4 := 0; //zum Test

  repeat
    I4 := I4 + 1;
    npw := IntToStr(I4); //als Ersatz

    If I4 = 11 then
    begin
      I3 := I3+1 ;
      I4 := 1 ;
    end;
    If I3 = 27 then
    begin
      I2 := I2+1;
      I3 := 1;
    end;
    If I2 = 11 then
    begin
      I := I+1;
      I2 := 1;
    end;
    //showmessage (npw);
  until I = 27;
  showmessage ('Ende');
end;
  Mit Zitat antworten Zitat