Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Struktogramm (https://www.delphipraxis.net/175191-struktogramm.html)

49rojhat49 5. Jun 2013 11:40

Struktogramm
 
Hallo Leute,

ich muss zu folgendem Code ein Struktogramm malen, habe aber keine Ahnung wie das funktioniert.

könnte mir vielleicht einer von euch helfen?

Code:
procedure TviewWizWerbemittelVersandDetails.refreshData;
var
  lRow, lCol: Integer;
  lLastAdrID: Double;
begin
  FWEMList.Clear;
  lLastAdrID := -1;
  //alle Zeilen ausser Header löschen
  grdDetails.Cells.RowCount := 0;
  //Spalten 5 - x löschen
  grdDetails.Cells.ColCount := 4;
  //Werbemittel einlesen
  CheckClose(qryWerbemittel);
  CheckOpen(qryWerbemittel);

  grdDetails.BeginUpdate;
  try
    while not (qryWerbemittel.Eof) do begin
      //Spalte erzeugen
      lCol := grdDetails.Cells.AddColumn;
      //es gibt wohl keine Möglichkeit, Daten in einer Header-Zelle zu speichern, also
      //speichern wird die WEM-IDs in einer Liste
      FWEMList.Add(TFloatClass.Create(qryWerbemittelwem_id.AsFloat));

      grdDetails.cells.Columns[lCol].Caption := qryWerbemittelwem_display_name.AsString;
      grdDetails.cells.Columns[lCol].Tag := qryWerbemittelwem_verfuegbar.AsInteger;
      qryWerbemittel.Next;
    end;
    CheckClose(qryWerbemittel);
    //Transfers einlesen
    lRow := 0;
    CheckClose(qryWerbemitteltransfer);
    CheckOpen(qryWerbemitteltransfer);
    while not (qryWerbemitteltransfer.Eof) do begin
      //neue Adresse, neue Spalte
      if (lLastAdrid <> qryWerbemitteltransferwmt_adrid.AsFloat) then begin
        lRow := grdDetails.cells.AddRow;
        grdDetails.Cells[0, lRow].Data := TFloatClass.Create(qryWerbemitteltransferwmt_adrid.AsFloat);
        grdDetails.Cells[0, lRow].Text := qryWerbemitteltransferadr_schluessel.AsString;
        grdDetails.Cells[0, lRow].CanEdit := false;
        grdDetails.Cells[0, lRow].CanEnter := false;
      end;
      //Spalten 2 bis 4 editierbar machen
      grdDetails.cells[2, lRow].Value := 0;
      grdDetails.cells[2, lRow].CanEdit := true;
      grdDetails.cells[2, lRow].CanEnter := true;
      // enthält die plz zum sortieren (-> sortData.value)
      grdDetails.cells[1, lRow].FormatString := qryWerbemitteltransferadr_plz.AsString;
      if (-1 <> getIndexFromAdrList(qryWerbemitteltransferwmt_adrid.AsFloat)) then begin
        grdDetails.cells[3, lRow].Value := 1;
      end else begin
        grdDetails.cells[3, lRow].Value := 0;
      end;
      grdDetails.cells[3, lRow].CanEdit := true;
      grdDetails.cells[3, lRow].CanEnter := true;
      //Spalte suchen
      for lCol := 4 to grdDetails.Cells.ColCount - 1 do begin
        if (TFloatClass(FWEMList[lCol - 4]).FData = qryWerbemitteltransferwmt_wemid.AsFloat) then begin
    grdDetails.cells[lCol, lRow].Alignment := taCenter;
          grdDetails.Cells[lCol, lRow].Text := qryWerbemitteltransferwmt_anzahl.AsString;
          if qryWerbemitteltransferwmt_vertroestetdatum.IsNull then begin
          end else begin
            grdDetails.Cells[lCol, lRow].Color := clLime;
          end;

        end;
        grdDetails.Cells[lCol, lRow].CanEdit := false;
        grdDetails.Cells[lCol, lRow].CanEnter := false;
      end;
      lLastAdrID := qryWerbemitteltransferwmt_adrid.AsFloat;
      qryWerbemitteltransfer.Next;
    end;
    CheckClose(qryWerbemitteltransfer);
  finally
    grdDetails.EndUpdate;
  end;
  lblCount.Caption := IntToStr(grdDetails.Cells.RowCount);
  sortData;
end;

Der schöne Günther 5. Jun 2013 12:01

AW: Struktogramm
 
Hallo-

Hast du verstanden, was ein Struktogramm ist? Der Wikipedia-Artikel hat sogar ein Pascal-Beispiel...

Bekommst du denn selbst ein kleines Struktogramm für etwas in der Art von "Wenn etwas gilt, dann schreibe nacheinander 1 bis 10"?

49rojhat49 5. Jun 2013 12:09

AW: Struktogramm
 
jaa das würde ich hinkriegen mit den 1-10.

aber auch mit dem artikel kann ich das nicht .. zu kompliziert für mich :(

Sir Rufo 5. Jun 2013 12:11

AW: Struktogramm
 
Und was konkret nicht?

49rojhat49 5. Jun 2013 12:14

AW: Struktogramm
 
naja erstmal kommt ein whlile dann noch eins dann if else und wieder das ist mir zu komöiziert ich komm dann durcheinander versteht ihr?

Der schöne Günther 5. Jun 2013 12:18

AW: Struktogramm
 
Wenn du es im Endeffekt kannst, es dir aber zu komöiziert ist, was erwartest du dann? Möchtest du die Lösung zu dem Quellcode-Block von oben haben?

Sir Rufo 5. Jun 2013 12:22

AW: Struktogramm
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1217541)
Wenn du es im Endeffekt kannst, es dir aber zu komöiziert ist, was erwartest du dann? Möchtest du die Lösung zu dem Quellcode-Block von oben haben?

Evtl. ist das Thema in der falschen Kategorie gelandet und sollte eigentlich in http://www.delphipraxis.net/66-job-b...e-und-gesuche/ ;)

49rojhat49 5. Jun 2013 12:23

AW: Struktogramm
 
also wenn es jemand machen würde dann gerne, aber wenn nicht ist es auch nicht so schlimm.

dann versuch ich das halt anders hinzukriegen

baumina 5. Jun 2013 12:29

AW: Struktogramm
 
Das schöne an Pascal ist ja, dass man es tatsächlich, wie du sagst, von oben nach unten lesen kann. Also fängst am besten genau so an wie du es geschrieben hast.

Erst ein while ... da innerhalb der while (gekennzeichnet durch begin/end) keine weitere Abfrage ist, kannst darunter dann die 2. while machen. Nun wird's spannend ... innerhalb der 2. while-schleife hats mehrere if-Abfragen (alle gleichwertig, weil nicht weiter verschachtelt), also die musst dann auch da mit reinpacken. Die for-Schleife innerhalb der while-schleife ist auf selber Ebene wie die if-Abfragen. Zum Schluss hast noch eine if-Abfrage innerhalb der for-Schleife, also hast du insgesamt eine Verschachtelungstiefe von 3 Ebenen in der for-Schleife.

DeddyH 5. Jun 2013 12:30

AW: Struktogramm
 
Hier gibt es einen Struktogramm-Editor. Und wie es der Zufall so will: auf dem Screenshot sieht man eine Kopfschleife (while), die eine Einfachverzeigung enthält (If).

Sir Rufo 5. Jun 2013 12:31

AW: Struktogramm
 
Ich unterstelle dem TE jetzt mal, dass die Faulheit größer als die Unwissenheit ist :mrgreen:

Der schöne Günther 5. Jun 2013 12:32

AW: Struktogramm
 
Versuch es doch erst einmal wie weit du kommst, dann können wir ja drüberschauen.

Wenn du später als Struktogrammeuer (oder Struktogrammist? :gruebel:) arbeiten willst und das von Sonnenauf- bis untergang machen musst - Dann musst du das doch können.

Sir Rufo 5. Jun 2013 12:35

AW: Struktogramm
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1217547)
Versuch es doch erst einmal wie weit du kommst, dann können wir ja drüberschauen.

Wenn du später als Struktogrammeuer (oder Struktogrammist? :gruebel:) arbeiten willst und das von Sonnenauf- bis untergang machen musst - Dann musst du das doch können.

Muss man nicht, ist nur eine Frage der Organisation
http://www.zeit.de/digital/internet/...-china-verizon

p80286 5. Jun 2013 12:36

AW: Struktogramm
 
Zitat:

Zitat von 49rojhat49 (Beitrag 1217543)
dann versuch ich das halt anders hinzukriegen

Wenn Du weißt wie, erzählst Du es hier?
Mir macht das Malen in Word auch keinen Spaß.

Gruß
K-H

baumina 5. Jun 2013 12:39

AW: Struktogramm
 
Zitat:

Zitat von Sir Rufo (Beitrag 1217548)
Muss man nicht, ist nur eine Frage der Organisation
http://www.zeit.de/digital/internet/...-china-verizon

*An den Kopf klatsch* ... und ich Trottel geh noch selber arbeiten ...

user0815 5. Jun 2013 14:49

AW: Struktogramm
 
einen Editor gibt es auch Online: https://www.draw.io/

Caps 5. Jun 2013 15:10

AW: Struktogramm
 
Der Link scheint nicht zu funktionieren... (?)

lg Caps

Der schöne Günther 5. Jun 2013 15:14

AW: Struktogramm
 
Doch, klar.

Draw.io (ehemals diagram.ly) ist eine tolle Web-Anwendung um auf die Schnelle mal ein Diagramm zusammenzuzimmern.

Möglicherweise geht es nicht mit einem zu alten Browser?

sx2008 5. Jun 2013 16:40

AW: Struktogramm
 
Schritt 1
den Code sauber einrücken. Ich empfehle 3 Blanks pro Einrückung.
Schritt 2
Code entflechten. Da passiert einfach zu viel auf einmal.
Man kann z.B. diesen ganzen Block in eine eigene Unterprozedur verschieben:
Delphi-Quellcode:
procedure TviewWizWerbemittelVersandDetails.CreateColumns;
var
   lCol: Integer;
begin
   CheckClose(qryWerbemittel);
   CheckOpen(qryWerbemittel);
   while not (qryWerbemittel.Eof) do
   begin
      //Spalte erzeugen
      lCol := grdDetails.Cells.AddColumn;
      //es gibt wohl keine Möglichkeit, Daten in einer Header-Zelle zu speichern, also
      //speichern wird die WEM-IDs in einer Liste
      FWEMList.Add(TFloatClass.Create(qryWerbemittelwem_id.AsFloat));

      grdDetails.cells.Columns[lCol].Caption := qryWerbemittelwem_display_name.AsString;
      grdDetails.cells.Columns[lCol].Tag := qryWerbemittelwem_verfuegbar.AsInteger;
      qryWerbemittel.Next;
   end;
   CheckClose(qryWerbemittel);
end;
Du kannst ruhig mehrere Struktogramme zeichnen.
Wenn du nur diesen Code betrachtest, dann hast du am Anfang einen Block ("qryWerbemittel neu öffnen") gefolgt von einer abweisenden (vorprüfende – kopfgesteuerte) Schleife.
In der Schleife befindet sich ein Block mit mehreren Anweisungen.
Nach der Schleife kommt noch ein Block ("qryWerbemittel schliesen").

Schritt 3
es ist empfehlenswert die Struktogramme zuerst mit Bleistift auf ein Papier zu bringen.
Damit bist du 10 Mal schneller als wie mit einem Tool.
Pro Prozedur ein Struktogramm auf einem DIN A4 Blatt!

Schritt 4
Wiederholungen durch Hilfsprozedur/funktion ersetzen:
Delphi-Quellcode:
procedure TviewWizWerbemittelVersandDetails.MakeCellEditable(col, row:Integer; EditFlag:Boolean);
begin
   grdDetails.Cells[Col, Row].CanEdit := EditFlag;
   grdDetails.Cells[Col, Row].CanEnter := EditFlag;
end;
Es gibt 4 Stellen, an denen du diese Prozedur aufrufen kannst.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz