Archiv verlassen und diese Seite im Standarddesign anzeigen : Erstellung des Flussdiagramms zum Programm LED-Lauf
Hallo,
Das geschriebene Programm steuert die 7-Segment-Anzeige als Ziffer "8", wo Segmente nacheinander im Ziffer "8" durchlaufen (Segmente der Ziffer "8" sind anzusteuernde LEDs).
Daneben werden andere in der Reihe positionierte LED nacheinander angeleuchtet auch als Lauflicht (wenn eine LED [x+1] AN geht - geht der vorherige LED [x] aus).
Ausdrucke/Anweisungen im Flussdiagramm: Digit_Port_Display =0x__ entsprechen einem Segment-LED im Ziffer "8"
Ausdrucke/Anweisungen im Flussdiagramm: Digital_Port_DA =x__ entsprechen einem LED aus der LED-Reihe.
Ich erstelle zu dem Programm (s. Anhang "Prog_01") das Flussdiagramm (s. Anhang "Flussdiagramm"), nur dazu habe ich Fragen:
1) Wohin geht das Befehl "return" (Zeile 76) ?
2) Was passiert falls i<7 2a) Wie wird die Schleife dann geschlossen falls i<7 ?
3) Entspricht der Ausdruck i &= 0x07 (Zeile 74) der Stelle im Flussdiagramm i=7 ?
Peter(TOO)
14.06.2016, 01:52
Hallo,
1) Wohin geht das Befehl "return" (Zeile 76) ?
2) Was passiert falls i<7 2a) Wie wird die Schleife dann geschlossen falls i<7 ?
3) Entspricht der Ausdruck i &= 0x07 (Zeile 74) der Stelle im Flussdiagramm i=7 ?[/B]
Schon mal versucht etwas auf den eingestellten Bildchen zu lesen?
Du hast da A4 (210x298mm) als 810x456 Pixel. Also etwa 0.65mm/Pixel, also unter 40Dpi!
MfG Peter(TOO)
i_make_it
14.06.2016, 06:36
Wie schon von meinem Vorredner geschrieben sind die Bilder so klein das sie nicht brauchbar/lesbar sind.
RETURN:
https://msdn.microsoft.com/de-de/library/sta56yeb.aspx
Danke für Hinweis. Ich habe die Bilder durch besseren ersetzt. Di Frage sind auch auf dem Flussdiagramm sichtbar.
Peter(TOO)
14.06.2016, 23:50
Hallo,
Der grundlegende Denkfehler an der Geschichte ist, dass da gar keine Schleife ist!
Das ist eine Funktion, welche bei jedem Aufruf einmal durchlaufen wird.
In diesem Fall, kann man return auch weg lassen, es ändert am Programmablauf nichts.
MfG Peter(TOO)
Hallo,
Der grundlegende Denkfehler an der Geschichte ist, dass da gar keine Schleife ist!
Das ist eine Funktion, welche bei jedem Aufruf einmal durchlaufen wird.
In diesem Fall, kann man return auch weg lassen, es ändert am Programmablauf nichts.
MfG Peter(TOO)
Danke. Und wo sollte diese Schleife sein und wie ist die Schleife geschlossen?
Peter(TOO)
16.06.2016, 05:29
Danke. Und wo sollte diese Schleife sein und wie ist die Schleife geschlossen?
Ist das mein Programm oder deines?
i_make_it
16.06.2016, 08:36
Von der Syntax her ist das ja C++, da nur dieser Codeausschnitt gezeigt wird und der auch nur als Bild und nicht als Code, ist das vermutlich nicht das Programm des TO sondern eher eine Schulaufgabe.
Da in C keine deutschen Worte für Befehle und sprachinterne Bezeichner vorkommen, ist das keine Schleife, sondern eine Funktion mit dem Namen schleife.
Diese Funktion wird mit dem Bezeichner "schleife" irgendwo anders (vermutlich im Hauptprogramm) aufgerufen.
In einer Definition einer Funktion ohne Parameter kann das Paar runder Klammern leer gelassen werden oder das Schlüsselwort "void" enthalten. In beiden Fällen wird eine Funktion ohne Parameter definiert
In der Funktion befindet sich eine Switch Aweisung, in dem die einzelnen Fälle (case) per break die Switch Anweisung verlassen können.
Danach werden noch
i++;
und
i &= 0x07;
ausgeführt.
Anschließend wird die Funktion mit "return" verlassen und in das aufrufende Programm, hinter den Funktionsaufruf zurückgekehrt.
(das kann einem Google in unter 2 Miunten liefern)
Eine Schleife im Sinne eines C Programmkonstruktes gibt es nicht.
Anschließend wird die Funktion mit "return" verlassen und in das aufrufende Programm, hinter den Funktionsaufruf zurückgekehrt.
(das kann einem Google in unter 2 Miunten liefern)
Eine Schleife im Sinne eines C Programmkonstruktes gibt es nicht.
Vielen Dank. Wo ist das Befehl "return" zu platzieren? Ich habe das frisches Flussdiagramm hochgeladen?
Vor dem "Ende" oder "return" ist das Punktir-Pfeil zur aufrufenden Datei?
Außerdem, gibt es hier keine interne Schleife? Ich denke - nicht, aber bin nicht sicher.
- - - Aktualisiert - - -
Anbei ist frisches Flussdiagremm
Peter(TOO)
20.06.2016, 21:41
Hallo,
Vielen Dank. Wo ist das Befehl "return" zu platzieren? Ich habe das frisches Flussdiagramm hochgeladen?
Vor dem "Ende" oder "return" ist das Punktir-Pfeil zur aufrufenden Datei?
Außerdem, gibt es hier keine interne Schleife? Ich denke - nicht, aber bin nicht sicher.
- - - Aktualisiert - - -
Anbei ist frisches Flussdiagremm
Die break; Anweisungen gehören nicht ins Flussdiagramm, sie bestimmen nur den Weg im Programm und verarbeiten keine Daten. Der Weg wird aber schon durch die Linien im Flussdiagramm angezeigt.
Entsprechend würde man auch goto's nicht angeben.
Und das return gehört auch dazu, es beeinflusst nur den Weg im Programm.
Wenn dann würde man Return da hin schreiben wo bei dir jetzt ENde steht.
In deinem Programm kannst du return auch im Sourcecode weg lassen, der Compiler weiss auch so wo die Funktion zu Ende ist.
return braucht man nur, wenn man mitten in der Funktion beenden will und explizit, wenn die Funktion Werte zurück liefert.
MfG Peter(TOO)
Vielen Dank. Kann man die "break"-Anweisungen über den Pfeilen draufschreiben?
1. Kann man das Befehl "return" - über dem als Punktier-markiertes-Pfeil (von "Ende" zur Datei "Deklaration.h") draufschreiben?, weil das Befehl "return" bedeutet: rausspringen aus der Funktion.
Es ist erwünscht, "return" im Flussdiagramm zu erwähnen. Wo würden Sie das empfehlen?
2a. Zwischenfrage: aus welcher Funktion wird durch "return" rausgesprungen: aus der Funktion "void ZEITSCHLEIFE_50mS()" oder aus der Projektdatei "ZEITSCHLEIFE_50mS" ? Und durch "return" wird in die Datei des Projektes gelandet, wo der Ausdruck ZEITSCHLEIFE_50mS() steht?
3. Gibt es keine innere Schleife im angehängtes Programm (Flussdiagremm)? Das Programm wird nicht durch eine innere Schleife ausgeführt, sondern nur dann wenn sie von außen (anderes Programm) angesprochen ist (mit in vorherigen Programmaufruf vorbereitetem i=i+1 ) ?
Peter(TOO)
21.06.2016, 01:28
Hallo,
Vielen Dank. Kann man die "break"-Anweisungen über den Pfeilen draufschreiben?
Könnte man, aber wieso sollte man?
Es ist erwünscht, "return" im Flussdiagramm zu erwähnen. Wo würden Sie das empfehlen?
Wer lesen kann und auch versteht was er gelesen hat, ist klar im Vorteil, Auch hat es Vorteile die Ganze Antwort zu lesen.!
2a. Zwischenfrage: aus welcher Funktion wird durch "return" rausgesprungen: aus der Funktion "void ZEITSCHLEIFE_50mS()" oder aus der Projektdatei "ZEITSCHLEIFE_50mS" ?
IMMER aus der Funktion in welcher das return steht.
Es gibt in C die Funktionen setjmp() und longjmp(). Mit setjmp() wird ein Punkt im Programm markiert und longjmp() spingt dann immer da hin, wo longjmp() aufgerufen wurde.
Wenn setjmp() ausgeführt wird, ist der Rückgabewert 0. longjmp() sieht aus wie ein Aufruf von setjmp() aber der Rückgabewert ist dann ungleich 0.
Diesen Mechanismus verwendet man aber nur zur Fehlerbehandlung, wenn man keine andere Möglichkeit hat!
Meistens springt man dann zur Fehlerbehandlung, welche nur eine Fehlermeldung ausgibt und das Programm beendet.
Und durch "return" wird in die Datei des Projektes gelandet, wo der Ausdruck ZEITSCHLEIFE_50mS() steht?
Es geht immer dahin zurück, von wo der Aufruf der Funktion erfolgte!
Funktionen dürfen beliebig oft und aus beliebigen Stellen aufgerufen werden.
OK, dem Compiler muss die Funktion bekannt sein! Entweder durch ein Funktion-Prototype oder sonst muss der Aufruf irgendwo nach der Funktion stehen.
[QUOTE=Collage;628446]3. Gibt es keine innere Schleife im angehängtes Programm (Flussdiagremm)? Das Programm wird nicht durch eine innere Schleife ausgeführt, sondern nur dann wenn sie von außen (anderes Programm) angesprochen ist (mit in vorherigen Programmaufruf vorbereitetem i=i+1 ) ?
Die Funktion in deinem PDF fängt bei Start an und endet bei ENde. Da ist keine Schlaufe. Ein Schlaufe würde Programmteile innerhalb der Funktion mehrfach abarbeiten.
MfG Peter(TOO)
i_make_it
21.06.2016, 06:32
Ein Programmablaufplan (PAP) nach DIN 66001 (engl. flowchart) ist bewust unabhängig von Programmiersprachen.
Somit kommen da nirgendswo Befehlsworte aus eine Programmiersprache vor.
Start und Ende werden mit einem Kreis oder Rechteck mit abgerundeten Ecken dargestellt.
Gäbe es in der Funktion also an einer anderen Stelle wie dem Ende ein entscheidungsbedingtes Return, dann wären in dem PAP nicht zwei sondern drei von den Symbolen.
Pfeile (Verbindungslinien mit Richtungspfeil) stellen alle Programmflußpfade da, also auch GOTO, BREAK oder Rücksprünge in folge von DO- FOR- WHILE- Schleifen.
Gibt es keinen Pfeil der von unten wieder nach oben läuft und dort wieder in den den Programmfluß mündet, gibt es keine Schleife.
Deshalb sind Pfeile anstelle von Linien sinvoller, da man Schleifen von alternativen Pfaden (in Folge von Entscheidungen) sofort unterscheiden kann.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.