Überprüfen ob Nullvektor



  • Hallo zusammen!
    Ich möchte in einem kleinen C-Programm überprüfen ob ein übergebener Vektor ein Nullvektor ist. Falls er kein Nullvektor ist soll eine Routine durchgeführt werden ansonsten soll der Vektor unverändert zurückgegeben werden.
    In MATLAB gibt es dafür den folgenden Befehl if any(v(:)). Gibt es etwas Ähnliches in C?
    Es soll in etwas so aussehen:

    if any(v(:))
    -> Routine
    else
        r=v;
    end
    

    v ist hierbei der Vektor.

    Hat jemand eine Idee wie man die if Bedingung in C umsetzen kann?

    Vielen Dank im Voraus!

    Gruß metzger1887



  • Implementiere halt eine any Funktion? Das hängt auch ganz davon ab, wie dein Vektor in C überhaupt aussehen soll.



  • So ganz verstehe ich die Antwort nicht.
    Dies liegt wahrscheinlich daran, dass ich Programmierneuling bin und mir jegliche Erfahrung fehlt.
    Der Vektor ist vom Typ Double und beinhaltet 7 Werte.
    Im Grunde genommen suche ich einen Befehl der überprüft, ob alle 7 Werte gleich Null sind oder sich mindestens einer von Null unterscheidet.
    Es wird doch sicherliche eine elegantere Lösung geben als mit einer Schleife jeden einzelnen Wert zu überprüfen, die "Nullen" zu zählen und bei Nullen<7 die Routine auszuführen oder?

    Oder muss ich das Ganze folgendermaßen ausführen?

    Nullen=0;
    for (j=0; j<=elemente; j++)
    {
    if (r[j]==0)
    {Nullen=Nullen +1;}
    }
    if (Nullen<7)
    {subroutine;}
    else
    {r=v;}
    

  • Mod

    metzger1887 schrieb:

    Es wird doch sicherliche eine elegantere Lösung geben als mit einer Schleife jeden einzelnen Wert zu überprüfen, die "Nullen" zu zählen und bei Nullen<7 die Routine auszuführen oder?

    Wie wäre es, bei der ersten nicht-Null abzubrechen? Das ist wahrscheinlich nicht die schnellste, aber die eleganteste Lösung wird das schon sein. Das any aus MATLAB wird sicherlich nichts anderes tun. Aber MATLAB ist eben eine auf Mathematik spezialisierte Hochsprache; in C musst du das eben einmalig selber programmieren, da gibt es nichts Fertiges dafür.



  • Mach aber eine eigene Funktion draus.

    #include <stdbool.h>
    
    // true, wenn die ersten n Elemente von d 0.0 sind
    // false sonst
    bool vector_is_null(const double* d, size_t n) {
      // Deine Implementierung
    }
    
    // Beispiel:
    void f(void) {
      double *d = ...;
      size_t n  = ...;
      if(vector_is_null(d, n))
        ...;
      else
        ...;
    }
    


  • metzger1887 schrieb:

    Es wird doch sicherliche eine elegantere Lösung geben als ... oder?

    Wie machst du denn das r = v; in C (da beides ja wohl Vektoren sind)?


Anmelden zum Antworten