mit zeigerinhalt rechnen??



  • ..weiss dass ich ein bisschen durch den Wind bin, tut mir leid.
    Neuer Versuch:

    eine Zahl soll in eine DCF77 Zahl umgerechnet werden.

    Dazu gebe ich die Zahl ein ("Dezimalzahl").
    Dann kommt mein Algorithmus:
    Zahl 2 = eingegebene Zahl
    40 abziehen, wenn Zahl 2 dann kleiner 0, Rückgabewert, 1.Stelle =0, Zahl 2 = eingegebene Zahl
    wenn Zahl grösser 0, Rgw, 1. Stelle =1
    2. Stelle vom Rückgabewert berechnen, 20 abziehn... und so weiter.

    Mit "eingegebener Zahl" und "Zahl 2" rechne ich also, der Rückgabewert(DCF77Zahl) wird bis zum Schluss verändert und dann ausgegeben, der soll binär sein, also evtl. eine "0" an 1.Stelle haben. Deshalb dachte ich mir auch ich kann nich nur mit int- Werten rechnen, weil die "0" dann nicht dargestellt wird.

    !!Kann leider keine einfache dezimale Zahl-> binäre Zahl- Umrechnung nehmen, weil das in DCF77 anders gemacht wird...deshalb ein Alg. dazwischen der die einzelnen Stellen des Rgw.`s "abspeichert".

    Stew



  • Hallo,

    also ich musste eben erstmal googlen was DCF77 ist. Das ist ein Zeitsignal dass die genaue Zeit in Deutschland codiert und auf Frequenz 77,5 kHz gesendet wird.

    Ich hab immer noch Probleme deine Algorithmus zu verstehen.
    Kannst du den bitte nochmal den Algorithmus genau posten ?



  • ...es läuft also darauf hinaus, dass bei der eingegebenen Zahl überprüft wird, ob bestimmte andere Zahlen hinein passen. Diese Überprüfung soll stellenweise (0 = passt nich, 1 = passt) abgespeichert werden und ich dachte, dass macht sich mir nem char Zeiger oder -Feld am besten.

    Beispiel (DCF77-Minuten):

    eingegebene Zahl = 55.
    40 passt, Rückgabewert = 1. Stelle = 1 //passt -> Z-40 = >0
    15 übrig, passt 20 ? Nein. 2. Stelle Rückgabewert = 0 //passt nich -> Z < 0
    Zahl wieder 15
    passt 10? Ja, 3. Stelle Rgw = 1 //Rgw bis jetzt 101
    passt 8?
    passt 4?
    passt 2?
    passt 1?

    Dann Feldelemente umdrehen, FERTIG
    Nur die Programmier- Praxis haut nich hin 😞

    Stew



  • So wie ich das jetzt verstehe kannst du doch erst rechnen und wenn das Ergebnis feststeht dieses dann in Binärform umwandelst und dann ausgibst, oder würde dies nicht gehen.



  • ...siehe einen drüber bitte.

    Stew



  • Ok also ich denke jetzt habe ich verstanden was du willst, hier mal ein kleiner Lösungsansatz, wie ich es machen würde:

    // ...
    const int pos[7] = { 40, 20, 10, 8, 4, 2, 1 }; // Hier sind die verschiedene Zeitintervalle gespeichert die wir zum trennen benötigen.
    
    int eingabe = 55; // Hier der Wert denn wir umrechnen wollen
    
    char ergebnis[7];
    
    for(int i = 0; i < 7; i++)
    {
        if(eingabe > pos[i]) // Hier wird überprüft ob eingabe in die jeweiligen Möglichkeiten von pos passt.
        {
            ergebnis[i] = '1';
            eingabe -= pos[i];  // eingabe um den entsprechenden Betrag zu verringern.
        }
        else ergebnis[i] = '0';
    }
    // ...
    

    Also das hier ist ziemlich grob und auch nicht getestet, man kann es sicherlich auch noch schöner machen aber vielleicht hilft es dir weiter.



  • ..danke, probier ich mal so.

    Stew



  • Ok, jetz hab ich verstanden was du willst.

    Also

    const char *foo(int z1,char *dcf77){
    short bitpos=0,j=0;
    int values[]={40,20,10,8,4,3,1}
    while(j<7){
      if((z1-values[j])<0){
        dcf77[bitpos++]='0'; 
        //edit hab die zeile vergessen zu löschen 
      }else{
        dcf77[bitpos++]='1';
        z1-=values[j];
      }
      j++;
    }
    return dcf77;
    }
    

    Ich habs jetz nicht getestet. Meintest du sowas ?

    Edit: da war einer schneller



  • ...auch dir ein dankeschön. 😉

    Stew



  • Hallo,

    Funktionell das selbe aber mehr c++

    #include<string>
    #include<algorithm>
    
    const std::string foo(int zahl){
      short vals[]={40,20,10,8,4,2,1};
      std::string ret;
      for(int i=0;i<7;i++)
          (zahl > vals[i]) ? zahl-=vals[i],ret+='1' : ret+='0';
      std::reverse(ret.begin(),ret.end());
      return ret;
    }
    

Anmelden zum Antworten