Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Struktogramm, UML Sequenzdiagramm

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ] [ 3 ]
000
17.04.2014, 18:32 Uhr
sven123



Hallo zusammen,

bin beginner für C++......
Ich benötige für folgenden Quelltext ein Struktogramm oder wahlweise UML Sequenzdiagramm.
Kann mir jmd helfen, evt auch mit ein paar Erläuterungen zum Verständnis?

C++:
bool Aktor::toggle()
{
    bool success,oldState,newState;
    succsess=true;
    oldState=port.getState();
    if (state == true) {
        port.off();
    }
else {
    port.on();
    }
int timeOut=0;
    do{
        newState=port.getState();
        timeOut++;
        if (timeOut>1000)
        succsess=false;
    } while ( (oldState!=newState) || !success );
    return sucess;
}            


Vielen Dank für eure Hilfe.
---
Edit: cpp-Tags eingefügt.

Dieser Post wurde am 18.04.2014 um 02:46 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
18.04.2014, 03:02 Uhr
Hans
Library Walker
(Operator)


Hi,

wie würdest Du ein Struktogramm denn aufziehen?

Hinweis: allgemein sind Diagramm in diesem Forum etwas umständlich darzustellen, aber Struktogramme gehen. Man muss sie aber in code-Tags einschliessen. Ausserdem sollte man sie an einem Editor entwerfen, der eine feste Zeichenbreite hat und anschliessend via copy and paste ins Eingabefeld kopieren.

Dann noch 'ne Frage zu dem Quelltext: Wo ist denn die Variable state deklariert?
Ich seh da nur deklarationen von success, oldState und newState, aber kein state.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
18.04.2014, 15:08 Uhr
sven123



Hmm,

das der Quelltext unvollständig ist macht die Aufgabenstellung nicht einfacher.
Kannst du mir sagen was das Proggi, wenn vollständig, machen sollte.

mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
18.04.2014, 22:34 Uhr
Hans
Library Walker
(Operator)


Hi,

Zitat von sven123:

Kannst du mir sagen was das Proggi, wenn vollständig, machen sollte.


woher soll ich das wissen? - Du hast die Aufgabe bekommen, also solltest Du auch den Hintergrund kennen und wissen, wozu das Programm gut sein soll.

Du hast übrigens meine Frage nicht beantwortet, nämlich wie Du das Struktogramm aufziehen würdest? - Kleiner Tip: Man nennt diese Struktogramme auch "Nassi-Shneiderman-Diagramm", und unter dem Stichwort steht in der Wikipedia 'ne ganze Menge dazu.

Noch ein Tip: Meiner Meinung nach ist das Programmfragment schlecht formatiert, so das die Logik auch optisch nicht so schnell erkennbar ist, wie sie es sein könnte. Deshalb hier mal ein anderer Vorschlag:

C++:
bool Aktor::toggle()
{
    bool success,oldState,newState;

    succsess=true;
    oldState=port.getState();
    if (state == true)
        {
            port.off();
        }
    else
        {
            port.on();
        }
    int timeOut=0;
    do
        {
            newState=port.getState();
            timeOut++;
            if (timeOut>1000)
                succsess=false;
        }
    while ( (oldState!=newState) || !success );
    return sucess;
}



Ansonsten bitte noch das hier beachten und frohes Schaffen.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
28.04.2014, 18:01 Uhr
sven123



Hallo Hans,

danke für Deine Hilfe. Das Problem ist für mich das normalerweise aus einem Problem ein Struktogramm und daraus ein Code erzeugt wird...Bei der Aufgabenstellung ist es nun umgekehrt. Zur Lösung muss ich aber das Programm verstehen und dies fällt mir schwer, da der Code unvollständig ist.

Ja "State" ist nicht deklariert, da es in Zeile 6 "true" gesetzt wird deklariere ich Bool wie folgt und schreibe hinter jede Zeile was ich denke was diese tut......

C++:
bool Aktor::toggle()
//was beschreibt diese Zeile? Ein Aktor kann zw Zuständen (true, false) hin/her schalten? Oder ist der Aktor der port?

{
    bool success,oldState,newState, state;
//deklaration success,oldState,newState, state als bool (true, false)

    succsess=true;
//succsess wird "true" zugewiesen

    oldState=port.getState();
//Was wird hier getan? "oldstate" wir gleichgesetzt zu "state"? Wäre also "oldstate" = true würden wir im folgenden "if" Zweig den Port off schalten?

    if (state == true)
//start einfache if/else Verzweigung, wenn state = true, if Zweig und port geht off. Wenn state alles andere dann else Zweig und port geht on.

        {
            port.off();
        }
    else
        {
            port.on();
        }
    int timeOut=0;
//integer "timeOut" wird angelegt und auf 0 gesetzt....Start kopfgesteuerte Schleife

    do
        {
            newState=port.getState();
//wie oben angegeben wäre "state" ja true und würde nun auch "newstate" auf true setzen?

            timeOut++;
//timeOut wird eins hochgezählt, "state" und "newState" werden gleichgesetzt?

            if (timeOut>1000)
                succsess=false;
//wenn timeout größer 1000 wird succsess auf false gesetzt

        }
    while ( (oldState!=newState) || !success );
//while = Durchlauf/Abbruchbedingungen, ist oldState ungleich newState oder nicht succsess (der Wert den succsess hat (true/false)), dann Ausgabe "succsess"...nun sind aber im Beispiel "oldestate" und "newstate" beide true, also nicht ungleich, nun würde es nur über den Oderzweig weiter gehen, succsess ist ja true.....

    return sucess;
}


Was ich nicht verstehe, nirgends wird der Status von "oldstate", "newstate" oder "state" umgeschaltet, diese wären wenn einmal true immer true.....was ja keinen Sinn macht, die Schleife würde einfach bis 1000 hochzählen succsess auf false setzten und beim nächsten Durchlauf wieder auf true....

mfg

---
Edit: cpp-Tags eingefügt.

Dieser Post wurde am 28.04.2014 um 21:06 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
28.04.2014, 22:28 Uhr
Hans
Library Walker
(Operator)


Hi,

Zitat von sven123:

Das Problem ist für mich das normalerweise aus einem Problem ein Struktogramm und daraus ein Code erzeugt wird...


Normalerweise ja. Man kann aber auch einfach den Quelltext nehmen, und ihn als Struktogramm darstellen. Dazu schreibt man den Quelltext mehr oder weniger ab, wobei man Strukturelemente wie Schleifen, Verzweigungen, etc. in die entsprechenden Symbole packt. Das wird wahrscheinlich auch ein Teil der Aufgabe sein.


Zitat von sven123:

Bei der Aufgabenstellung ist es nun umgekehrt. Zur Lösung muss ich aber das Programm verstehen und dies fällt mir schwer, da der Code unvollständig ist.


Wenn die Aufgabe darin besteht, den Programmtext zu verstehen, kann es ja vielleicht sein, das es u.a. genau darum geht, heraus zu finden, dass die Variable state nicht deklariert ist. Sie könnte aber auch global und deshalb an anderer Stelle deklariert sein.
Ansonsten handelt es sich nur um einen Teil eines Programms, genauer gesagt um eine Elementfunktion oder Methode einer Klasse, die Teil eines grösseren Programms ist.


Zitat von sven123:

Ja "State" ist nicht deklariert, da es in Zeile 6 "true" gesetzt wird deklariere ich Bool wie folgt und schreibe hinter jede Zeile was ich denke was diese tut......


Nun ja, da haben wir schon einen Fehler: state wird eben nicht true gesetzt, sondern es wird geprüft, ob state den Wert "true" ist. Da stehen nämlich zwei Gleichheitszeichen ( == ), nicht nur eines. Dann mal weiter...


Zitat von sven123:


C++:
bool Aktor::toggle()
//was beschreibt diese Zeile? Ein Aktor kann zw Zuständen (true, false) hin/her schalten? Oder ist der Aktor der port?




Oh, ohh! - Grundlegendes Syntaxdefizit! - Das ist die Zeile, die einem sagt, dass es sich um eine Elementfunktion (oder Methode) handelt.
Aus dem Namen der Klasse (Aktor) und dieser Funktion (toggle()) sowie den anderen, verwendeten Variablennamen schliesse ich, dass es um die Steuerung von Maschienen geht, denn ein Aktor ist ein mechanisches Teil, wie ein Motor oder ein Elektromagnet. Wenn dem so ist, dann wird mit dieser Funktion die Elektronik gesteuert bzw. abgefragt, die für die Bewegung der Hardware zuständig ist. Da "toggle" soviel wie "umschalten" bedeutet, wird hier also etwas geschaltet. Das wiederum bedeutet, dass sich hinter state ein Register verbergen dürfte, welches von der Hardware geändert wird, und eine Aufgabe der Funktion darin besteht, diese Änderungen zu überprüfen, bzw. abzufragen.


Zitat von sven123:


C++:
{
    bool success,oldState,newState, state;
//deklaration success,oldState,newState, state als bool (true, false)

    succsess=true;
//succsess wird "true" zugewiesen




Soweit richtig. Aber wozu soll das gut sein? - Kleiner Tip: es dient dazu, den Rückgabewert der Funktion zu bestimmen...


Zitat von sven123:


C++:
    oldState=port.getState();
//Was wird hier getan? "oldstate" wir gleichgesetzt zu "state"? Wäre also "oldstate" = true würden wir im folgenden "if" Zweig den Port off schalten?




- Was ist denn ein "port" in diesem Zusammenhang (Maschienensteuerung), und was bedeutet "get"?


Zitat von sven123:


C++:
    if (state == true)
//start einfache if/else Verzweigung, wenn state = true, if Zweig und port geht off. Wenn state alles andere dann else Zweig und port geht on.

        {
            port.off();
        }
    else
        {
            port.on();
        }




Soweit so schön, und was könnte das bedeuten sollen? - D.h. was wird hier genau gemacht, wenn man bedenkt, das etwas umgeschaltet werden soll?


Zitat von sven123:


C++:
    int timeOut=0;
//integer "timeOut" wird angelegt und auf 0 gesetzt....Start kopfgesteuerte Schleife




Die Schleife ist nicht Kopf- sondern Fussgesteuert, weil ihre Abbruchbedingung am Ende steht. Wenn sie Kopfgesteuert wäre, würde die Abbruchbedingung am Anfang stehen, was sie aber nicht tut. - Ansonsten fängt die Schleife erst mit der do-Anweisung an. Wenn Du also Kommentare immer hinter einer Anweisung schreibst, dann bleib auch dabei, sonst verwirrst Du Dich irgendwann nur unnötig selbst.


Zitat von sven123:


C++:
    do
        {
            newState=port.getState();
//wie oben angegeben wäre "state" ja true und würde nun auch "newstate" auf true setzen?




again! - Was ist denn "newState" für ein Ding, und was ist "getState()" für ein Ding?


Zitat von sven123:


C++:
            timeOut++;
//timeOut wird eins hochgezählt, "state" und "newState" werden gleichgesetzt?




timeOut wird eins hochgezählt, richtig. Aber wo wird da was gleich gesetzt?


Zitat von sven123:


C++:
            if (timeOut>1000)
                succsess=false;
//wenn timeout größer 1000 wird succsess auf false gesetzt




Das ist wieder richtig.


Zitat von sven123:


C++:
        }
    while ( (oldState!=newState) || !success );
    return sucess;
//while = Durchlauf/Abbruchbedingungen, ist oldState ungleich newState oder nicht succsess (der Wert den succsess hat (true/false)), dann Ausgabe "succsess".




Soweit richtig.


Zitat von sven123:

..nun sind aber im Beispiel "oldestate" und "newstate" beide true, also nicht ungleich,


Sind sie das? - Wo steht das?


Zitat von sven123:

Was ich nicht verstehe, nirgends wird der Status von "oldstate", "newstate" oder "state" umgeschaltet,


Die werden auch gar nicht umgeschaltet. Es wird eine Funktion aufgerufen, die ihnen Werte zuweisst, und mit diesen Werten wird gearbeitet um etwas anderes umzuschalten.

Du solltest Dir dringend noch mal die Syntax von C++ ansehen, speziell wie Klassendeklarationen und Elementfunktionen (auch Methoden genannt) deklariert werden, und wie man sie im Programm benutzt. Und der Unterschied zwischen Variblen und Funktionen scheint Dir auch noch nicht ganz klar zu sein.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 28.04.2014 um 22:44 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
07.05.2014, 18:07 Uhr
sven123



Hallo Hans,

vielen Dank für deine ausführliche Antwort.
Der "port" ist also die Schnittstelle zur Hardware, schaltet also den Motor us. ein oder aus?
State ist also ein Register welches den "Zustand" der Schnittstelle "port" beinhaltet?
"port" schreibt den aktuellen Zustand in das Register "state"?
.getstate() liest das register aus?
Bedeutet dies dass:
oldState=port.getState();
//Register wird ausgelesen, = aktueller Schaltzustand von "port" und wird als "oldstate" benannt?
Sind also newstate und oldstate nur Zustände des Registers "state" die "true" oder "false" sind?
Die Funktionen ändernd den Zustand von "port" und "state" registriert diese Einträge?
Ist das soweit richtig verstanden?

mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
07.05.2014, 20:50 Uhr
Hans
Library Walker
(Operator)


Hi,

sag mal, in welchem Zusammenhang, bzw. in was für einer Schule (Schulform) hast Du die Aufgabe bekommen? - Mich beschleicht nämlich so langsam das Gefühl, dass Du mich auf den Arm nehmen willst, bzw. dümmer anstellst, als Du wahrscheinlich bist.
Und um mir die Sache etwas leichter zu machen, wäre es nicht schlecht, wenn Du mir mal verraten würdest, was für ein Gerät da gesteuert werden soll. Denn dass es sehr wahrscheinlich um eine Gerätesteuerung geht, kann ich mir zwar anhand der Funktions- und Variablennamen zusammen reimen, aber sicher ist es trotzdem nicht.

Denn wie ich schon oben in Post 003 geschrieben habe:

Zitat:

Du hast die Aufgabe bekommen, also solltest Du auch den Hintergrund kennen und wissen, wozu das Programm gut sein soll.

Es wäre also sehr hilfreich für mich, wenn Du mir den Hintergrund verraten würdest, denn dann bräuchte ich auch weniger zu raten!

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 07.05.2014 um 20:56 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
08.05.2014, 09:47 Uhr
Hans
Library Walker
(Operator)


Hi again,

so, nachdem ich gestern ziemlich genervt war, hier noch mal kurz was sachliches zu Deinem letzten Beitrag:
port ist ein Objekt im Sinne der OOP, d.h. ein Objekt- oder eine Variable, das/die Global definiert ist.
getState() ist eine Elementfunktion dieses Objekts namens port und liefert Informationen über den Zustand zurück. Diese Informationen werden in den zuvor deklarieten Variablen gespeichert, und damit wird weiter gearbeitet.

Damit solltest Du mir jetzt eine vernünftige Erklärung liefern können, was diese Funktion macht. Wenn Du das hinkriegst, hast Du's sehr wahrscheinlich verstanden.

Hans,
der immer noch leicht genervt ist.


P.S. Um auch wirklich zu verstehen, was die Funktion macht, solltest Du Dir dringend noch mal die Syntax von C++ ansehen, speziell wie Klassendeklarationen und Elementfunktionen (auch Methoden genannt) deklariert werden, und wie man sie im Programm benutzt. Und der Unterschied zwischen Variblen/Objekten und Funktionen scheint Dir auch noch nicht ganz klar zu sein. (Wiederholung aus post 005)

Und wie gesagt: Wenn Du mir mehr über den Zusammenhang mitteilen würdest, indem die Aufgabe gestellt wurde, (siehe letzten Beitrag) dann könnte ich auch besser helfen. Nur vorsagen tu ich nichts.
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
08.05.2014, 10:47 Uhr
sven123



Hallo Hans,

danke für deine Antwort.
Hier nur kurz....
Zum Hintergrund habe ich keine weiteren Daten. Die Frage lautete nur:
Erstellen Sie ein Struktogramm oder wahlweise ein UML-Sequenzdiagramm für den folgenden C++ Code.
Den Code hatten wir ja schon.
Es handelt sich hierbei um eine einleitende Aufgabe zu einer praktischen Phase. Informatik ist im Hochschulstudiengang, wirtschaftlich orientiert, ein Nebenfach. Ich denke es geht hierbei nicht wirklich darum den Hintergrund zu verstehen sondern trivial um die Umsetzung des Codes in UML.
Weiterhin nicht meine erstes Studium. Jedoch hatte ich mit Programmierung bisher nichts zu tun. Ich habe etwas Probleme mit dem Sprachsyntax sowohl im Code als auch im Kreise der Informatiker (vermutlich so ein Abgrenzungsdingens ).

Mein Ziel war einfach ein Programm exemplarisch zu zerlegen, Schritt für Schritt zu verstehen und so mit C++ familiär zu werden.

An Deinen Hinweisen arbeite ich.

mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ]     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: