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. |