mit zeigerinhalt rechnen??



  • ...danke dass Dus wenigstens versucht hast 😉

    Also meine Funktion soll mit 2 Zahlen rumrechnen und eine 3. Zahl ausgeben, da diese die Form "01010101" haben soll, also (wichtig!!) auch mit "0" anfangen kann, kann ich doch keine ints nehmen, oder?
    Ausserdem sagt er mir beim *int einlesen immer:

    Binaerer Operator '>>' : Kein Operator definiert, der einen rechtsseitigen Operator vom Typ 'int *' akzeptiert (oder keine geeignete Konvertierung möglich)

    ...

    Stew



  • Hallo,

    also ich glaube ich weiss jetzt was du willst. Aber du kannst nicht erwarten dass eine Zahl die du in ein char-array copierst dann plötzlich in binärdarstellung da drin steht.

    Rechne einfach mit integern. Und wenn du den Wert des Ergebnisses in seiner binärdarstellung haben willst, musst du ihn umwandeln. Wenn es das ist was du willst, und du nicht weisst wie du die Umwandlung machen sollst, kannst du ja nochmal posten. Aber ich lege dir ans Herz dich wirklich nochmal mit Datentypen und deren Darstellungen und repräsentationen zu beschäftigen.



  • Also,
    wenn er sagt Binärer Operator meint er damit den Shift-Operator welcher auf der rechten seite eine Zahl erwartet.

    Du kannst auch mittels iomanip eine Zahl mit einer vorhergehenden null ausgeben lassen, nur ob das in deinem Fall sinn macht kann ich so nicht beurteilen.

    Bsp:

    #include <iostream>
    #include <iomanip>
    
    using namespace std;
    
    int main()
    {
        int zahl = 10101;
        cout << setw(10) << setfill('0') << zahl;
        return 0;
    }
    

    Die Ausgabe würde dann so aussehen:

    0000010101
    

    Hat dir das weitergeholfen???



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