-         

Ergebnis 1 bis 9 von 9

Thema: Variable im Unterprogramm deklarieren

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.03.2013
    Beiträge
    235

    Variable im Unterprogramm deklarieren

    Anzeige

    Hallo,

    gibt es eine Möglichkeit ein Variable im Unterprogramm zu deklarieren, ohne sie als als globale Variable zu deklarieren?
    GRUND:

    Code:
    //  **************************************Unterprogramm lzahn2_ber  *******************************
    
    
    float lzahn2_ber ( float x1, float y1) {
    
                    //hier Berechnung
    
      lzahn2 = sqrt(   21164.49 - cos (W4 +  0.09180432) *  20574.0   );            // die Ausgabe erfolgt in mm
    
      float dleta_lzahn2 = lzahn2 - lzahn2_alt;
    
      float lzahn2_alt = lzahn2;
    
      //  return lzahn2;                                                                              
    
    }
    Ich möchte im UP diese Differenz berechenen lzahn2 - lzahn2_alt. Das kann natürlich nur funktionieren,
    wenn lzahn2_alt beim ersten Mal einen Wert hat.
    Als Parameter geht das m.E. auch nicht, weil der ja bei jedem UP-Aufruf wieder übernommen wird.

    Wie regelt man sowas?

    Gruß
    fredyxx

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.10.2014
    Beiträge
    2.415
    ja, das geht, du musst sie nur im Funktionsblock der betr. Funktion deklarieren, dann ist sie automatisch lokal.
    Code:
    int i;   // ist global
    
    
    
    void test () {
       int j;  // ist lokal
       //...
    }
    
    
    
    float x; // ist global
    
    
    
    void loop() {
       int i, k;  // hier beide lokal - Vorsicht bei Namensgleichheit wegen Verwechslungsgefahr, auf global i kannst du hier nicht zugreifen!
       float y;   // ebenfalls lokal
       //...
    }
    Geändert von HaWe (22.05.2016 um 18:24 Uhr)
    ·±≠≡≈³αγελΔΣΩ∞ Schachroboter:www.youtube.com/watch?v=Cv-yzuebC7E Rasenmäher-Robot:www.youtube.com/watch?v=z7mqnaU_9A8

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.03.2013
    Beiträge
    235
    Zitat Zitat von HaWe Beitrag anzeigen
    ja, das geht, du musst sie nur im Funktionsblock der betr. Funktion deklarieren, dann ist sie automatisch lokal.
    Code:
    int i;   // ist global
    
    
    
    void test () {
       int j;  // ist lokal
       //...
    }
    
    
    
    float x; // ist global
    
    
    
    void loop() {
       int i, k;  // hier beide lokal - Vorsicht bei Namensgleichheit wegen Verwechslungsgefahr, auf global i kannst du hier nicht zugreifen!
       float y;   // ebenfalls lokal
       //...
    }
    Das löst aber doch das Problem nicht. lzahn2_alt soll doch schon bei dem ersten Durchlauf einen Wert haben, damit die Gleichung

    float dleta_lzahn2 = lzahn2 - lzahn2_alt; lösbar ist.

    danach wird erst der neue zum alten Wert, der dann in den folgenden Durchläufen vorhanden ist

    Gruß
    fredyxx

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    13.01.2014
    Beiträge
    398
    Blog-Einträge
    3
    Code:
    float lzahn2_ber ( float x1, float y1) {
    
      static float lzahn2_alt = 0; // oder anderer Vorbelegungswert
      float lzahn2 = ...
      ...
      lzahn2_alt = lzahn2;
      ...                                                                             
    }

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.03.2013
    Beiträge
    235
    Ignoriert das Programm denn beim nächsten Aufruf des UPs diese Zeile?

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.10.2014
    Beiträge
    2.415
    bei static wird nur das erste Mal ein Wert initialisiert, wird er im Verlauf geändert, bleibt immer der aktuellste Wert gespeichert.

    ich hatte deine Frage auch falsch verstanden, weil du im Titel von "deklarieren" sprachst.
    Die Frage ging aber
    1. ums Deklarieren und
    2. ums Initialisieren.
    Den 2. Punkt hatte ich falsch verstanden.
    ·±≠≡≈³αγελΔΣΩ∞ Schachroboter:www.youtube.com/watch?v=Cv-yzuebC7E Rasenmäher-Robot:www.youtube.com/watch?v=z7mqnaU_9A8

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.03.2013
    Beiträge
    235
    Danke erst mal an euch beide.
    Wenn ich nicht klar komme melde ich mich wieder.

    Gruß
    fredyxx

  8. #8
    Unregistriert
    Gast

  9. #9
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.03.2013
    Beiträge
    235
    Klappt auch bei mir!!

Ähnliche Themen

  1. NIBOBee - Funktionen deklarieren
    Von pinsel120866 im Forum Sonstige Roboter- und artverwandte Modelle
    Antworten: 6
    Letzter Beitrag: 10.01.2010, 15:49
  2. Verständnisfrage zu SUB deklarieren
    Von mat-sche im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 13.01.2009, 17:19
  3. Variablen deklarieren für Tiny12
    Von EagleStar im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 11
    Letzter Beitrag: 18.11.2007, 12:35
  4. Variablen read/write - Debounce nur einmal deklarieren?
    Von ReVenGer im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 27.08.2007, 18:06
  5. Funktionen in bascom deklarieren?
    Von Lunarman im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 25
    Letzter Beitrag: 28.06.2007, 10:14

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •