![]() |
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; |
AW: Struktogramm
Hallo-
Hast du verstanden, was ein Struktogramm ist? ![]() Bekommst du denn selbst ein kleines Struktogramm für etwas in der Art von "Wenn etwas gilt, dann schreibe nacheinander 1 bis 10"? |
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 :( |
AW: Struktogramm
Und was konkret nicht?
|
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?
|
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?
|
AW: Struktogramm
Zitat:
![]() |
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 |
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. |
AW: Struktogramm
![]() |
AW: Struktogramm
Ich unterstelle dem TE jetzt mal, dass die Faulheit größer als die Unwissenheit ist :mrgreen:
|
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. |
AW: Struktogramm
Zitat:
![]() |
AW: Struktogramm
Zitat:
Mir macht das Malen in Word auch keinen Spaß. Gruß K-H |
AW: Struktogramm
Zitat:
|
AW: Struktogramm
einen Editor gibt es auch Online:
![]() |
AW: Struktogramm
Der Link scheint nicht zu funktionieren... (?)
lg Caps |
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? |
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:
Du kannst ruhig mehrere Struktogramme zeichnen.
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; Wenn du nur diesen Code betrachtest, dann hast du am Anfang einen Block ("qryWerbemittel neu öffnen") gefolgt von einer ![]() 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:
Es gibt 4 Stellen, an denen du diese Prozedur aufrufen kannst.
procedure TviewWizWerbemittelVersandDetails.MakeCellEditable(col, row:Integer; EditFlag:Boolean);
begin grdDetails.Cells[Col, Row].CanEdit := EditFlag; grdDetails.Cells[Col, Row].CanEnter := EditFlag; end; |
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