0 Daumen
267 Aufrufe

Frage:

Entwickeln Sie eine Funktion für die Erkennung von Impulsflanken (steigende/fallende Flanken)
mit folgender Signatur:


int edgeDetect(double value)
{
       int edge = -1; // Flankenerkennung ist ausgeschaltet
       // edge = 0 ... fallende Flanke erkannt
       // edge = 1 ... steigende Flanke erkannt
       // eine Flanke gilt als erkannt bei mindestens 5 bis 10
       // aufeinander folgenden fallenden oder steigenden Werten

       return edge;
}…



kann hier jemand weiterhelfen? Es soll in C++ programmiert werden.


Vielen Dank vorab.

von

1 Antwort

0 Daumen
 
Beste Antwort
  1. Statische Variable prev anlegen, in der der letzte Wert gespeichert wird.
  2. Statische Variable dir anlegen, in der gespeichert wird, ob der aktuelle Wert größer als der Wert von prev oder kleiner als der Wert von prev ist.
  3. Statische Variable count anlegen, in der gespeichert wird vor wie vielen Werten dir letztmalig seinen Wert geändert hat.
  4. Prüfen welche der Alternativen value > prev, value < prev, value == prev zutrifft. Je nach Ergbnis die Werte von dir und count anpassen.
  5. Je nach Wert von dir und count den Wert von edge anpassen.
  6. Wert von prev anpassen.
von 5,4 k

Danke für Deine Tipps...Sind dann dir, prev und count jeweils als int zu deklarieren?

value ist ja die Variable mit dem Datentyp double , richtig?

Statische Variable prev anlegen, in der der letzte Wert gespeichert wird.

Dann wäre es zweckmäßig, wenn prev den gleichen Datentyp hat wie der letzte Wert.

Bei mir stellen sich da einfach immer noch zu viele Fragen:

Was muß ich wo deklarieren, wie klammere ich(Blockklammer usw)?

Eine "ähnliche" Frage gab es ja hier schon mal, aber eben nur ähnlich:

blob.png

Text erkannt:

Die Nulldurchgänge sollen ermittelt werden.
bool detectPoint (double value)
\{tatic double previous \( =0 \);
if (previous*value \( <0 \) ) \{
previous \( = \) value;
return true;
\} else \{
return false;
\}\( \quad \)
bool detectPoint (double value)
\{
static double previous \( =0 \);
if (previous*value \( <0 \) ) \{
previous = value;
return true;
\} else \{
return false;
\}
\}

Wobei sich mir hier auch wieder folgende Frage stellt:

Was bedeutet der *  zwischen previous und value? Ein Zeiger ist das aber nicht oder?

Oder wird tatsächlich was multipliziert?

Was muß ich wo deklarieren,

Variablen musst du deklarieren.

Innerhalb von Funktionen musst du sie deklarieren.

Genau genommen darfst du sie auch außerhalb von Funktionen deklarieren. Das ist aber schlechter Stil und wenn du siehst wie jemand soetwas macht, dann solltest du schreiend weglaufen.

Was bedeutet der *  zwischen previous und value?

Multiplikation. Die Idee ist, dass ein Nulldurchgang genau dann stattgefunden hat, wenn der aktuelle Wert und der vorherige Wert unterschiedliche Vorzeichen haben und das Produkt dieser beiden deshalb negativ ist. Wenn du dagegen Zahlen mit gleichem Vorzeichen multipliziert, dann kann das Ergebnis nicht negativ sein. Das ist aber für deine Aufgabe nicht relevant.

Ein Zeiger ist das aber nicht oder?

Nein. Wenn *value eine Zeigerdereferenzierung wäre, dann würde zwischen previous und *value kein Operator stehen. Das erkennt der Compiler und fasst * deshalb nicht als Zeigerdereferenzierungsoperator auf.

Oder wird tatsächlich was multipliziert?

Ja.

Bin hier leider noch nicht so recht weitergekommen bzw steh immer noch aufm Schlauch, was die richtige Deklaration bzw Initialisierung mit Werten angeht

Wie sieht denn dein aktuelles Programm aus?

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community