Forum: PC-Programmierung Aktueller Stand eines Programmablaufs mit mehreren Schleifen grafisch darstellen


von Guido C. (guidoanalog)


Lesenswert?

Hallo,

ich habe ein Programm, das aus mehreren Schleifen besteht. Innerhalb 
einiger Schleifen sind weitere Schleifen. Dies geht bis zu drei Ebenen 
tief.

Damit ich einfach erfassen kann wie weit die Programmausführung bereits 
fortgeschritten ist möchte ich den Ablauf des Programms grafisch 
darstellen. Hierbei sollte es, möglichst auf einen Blick, möglich sein 
zu sehen wo die Programmausführung gerade steht. Ich möchte hierfür 
jedoch keine Anzeige, die von 0 bis 100% geht. Ich möchte vielmehr eine 
Darstellung, die mir zeigt in welcher Schleife und insbesondere in 
welchem Durchlauf der Schleife sich das Programm gerade befindet.

Habt Ihr einen Tipp für mich wie dies grafisch oder gar mit Text 
sinnvoll und ansprechend realisieren könnte?

Mit freundlichen Grüßen
Guido

von Karl H. (kbuchegg)


Lesenswert?

Wie wäre es mit 3 Zahlen?

  for( i = 0; i < 10; ++i )
    for( j = 0; j < 10; ++i )
      for( k = 0; k < 10; ++k )
        printf( "%d %d %d\n", i, j, k );


einfach, schnell gemacht und erzählt alles was man braucht.

(PS. Man kann natürlich den printf entsprechend den Schleifen aufteilen 
und auf 3 mal machen.

von Guido C. (guidoanalog)


Lesenswert?

Hallo Karl Heinz,

danke für die Rückmeldung. Die Schwierigkeit dabei ist, dass die 
Schleifen durchaus verschachtelter auftreten können.

  for( i = 0; i < 10; ++i ) {
    ...
    for( j = 0; j < 10; ++j ) {
      ...
    }
    for( k = 0; k < 10; ++k ) {
      ...
    }
    for( l = 0; l < 10; ++l ) {
      ...
      for( m = 0; m < 10; ++m ) {
        ...
      }
      ...
      for( n = 0; n < 10; ++n ) {
        ...
      }
    }
    ...
    for( p = 0; p < 10; ++p ) {
      ...
    }
  }

Es soll so innerhalb des Programms möglich sein einen Prüfablauf zu 
definieren (Heizen, Abkühlen, ...). So nach dem Motto: Zuerst 5 mal eine 
Minute Heizen und zwei Minuten Abkühlen, anschließend 10 Minuten Heizen 
und 20 Minuten Abkühlen, dann 10 mal drei Minute Heizen und fünf Minuten 
Abkühlen, usw...

Ideal wäre wenn es möglich wäre während des Ablaufs auf einen Blick zu 
erfassen wo der Ablauf gerade "steht".

Mit freundlichen Grüßen
Guido

von Karl H. (kbuchegg)


Lesenswert?

Guido C. schrieb:

> Es soll so innerhalb des Programms möglich sein einen Prüfablauf zu
> definieren (Heizen, Abkühlen, ...). So nach dem Motto: Zuerst 5 mal eine
> Minute Heizen und zwei Minuten Abkühlen, anschließend 10 Minuten Heizen
> und 20 Minuten Abkühlen, dann 10 mal drei Minute Heizen und fünf Minuten
> Abkühlen, usw...
>
> Ideal wäre wenn es möglich wäre während des Ablaufs auf einen Blick zu
> erfassen wo der Ablauf gerade "steht".

Das Hauptproblem (oder besser: mein Hauptproblem) besteht darin, dass du 
diese Squeneznummern am besten irgendwo an eine fixe Position am Monitor 
schreibst. Nur leider sind derartige Dinge ausserhalb des C-Standards 
angesiedelt (C kennt erst mal keinen Bildschirm oder eine Tastatur. C 
kennt nur Eingabeströme und Ausgabeströme. Welche Geräte da dann drann 
hängen ist C an sich egal). Das bedeutet: Du musst das nehmen, was du 
zur Verfügung hast. Viele Consolen können zb mit VT100 Sequenzen 
umgehen. Oft gibt es auch eine nCurses-Library, so dass man dann den 
Ausgabecursor gezielt am Monitor platzieren kann. Wenn du sowas hast, 
dann such dir eine nette Ecke aus, in der du deine Sequenznummern 
ausgeben willst (3 Stück) und gib demenstprechend in jedem 
Schleifendurchlauf die betreffende Nummer an ihrem Platz aus.
So eine nCurses Library ist sowieso nicht schlecht, wenn du ein 
einigermassen ansprechendes Benutzerinterface basierend auf einem 
CHaracter-Display bauen willst. Mit einem graphischen Überbau sieht das 
alles dann natürlich sowieso noch wesentlich eleganter aus.

von Guido C. (guidoanalog)


Lesenswert?

Hallo,

Karl Heinz Buchegger schrieb:
> Mit einem graphischen Überbau sieht das
> alles dann natürlich sowieso noch wesentlich eleganter aus.

Ich denke mittlerweile: Wenn der aktuelle Stand möglichst einfach zu 
erfassen sein soll ist eine grafische Darstellung recht hilfreich wenn 
nicht gar unumgänglich. So sind beispielsweise sich füllende Balken 
(Stichwort: Fortschrittsanzeiger) leichter zu erfassen als Zahlen. 
Allerdings stellt sich mir hierbei die Frage wie ich dies genau 
darstellen soll. Vielleicht pro Schleife einen Fortschrittsanzeiger, der 
entsprechend dem Code eingerückt ist?

1
■■■■□□□□□□
2
  ■■■■■■■■■■
3
  ■■■■■■■■■■
4
  ■■■■□□□□□□
5
    ■■■■■■■■■■
6
    ■■■■□□□□□□
7
  □□□□□□□□□□□

Mit freundlichen Grüßen
Guido

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.