tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
29
ZUGRIFFE
761
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Maiden Maiden ist offline Mitglied Bronze
    Registriert seit
    Mar 2010
    Beiträge
    35
    Blog-Einträge
    1
    warum bei der funktion int dezipart 1 das --c so wichtig ist ?
    Geändert von Maiden (24.03.10 um 15:05 Uhr)
     

  2. #2
    Avatar von Vereth
    Vereth Vereth ist offline Mitglied Brokat
    Registriert seit
    Nov 2009
    Ort
    Dortmund
    Beiträge
    372
    Weil er den String von hinten nach vorne einliest, denn die linken Stellen einer Zahl haben die höhere Wertigkeit. Er multipliziert jede 'Ziffer' mit ihrem Wert, und bei der Stelle mit der Wertigkeit 1 (=b^0) beginnt er mit der Berechnung. Und bei jeder neuen Ziffer berechnet er deren Wertigkeit, indem er sukzessive b mit der Basis multipliziert.
    In der vorhergehenden while-Schleife erhöht er den String-Zeiger, bis er das Stringende erreicht hat. Die Syntax ist korrekt, kann aber auf manchen irritierend wirken, weil er die geschweiften Klammern weggelassen hat.

    Code cpp:
    1
    
    // Und benutze das nächste Mal bitte die cpp-Tags
     
    Vielen Dank für die Nutzung des Bewerten- und Danke-Buttons

    Wenn man sieht, dass man einen anderen glücklich gemacht hat, ist die Welt um zwei glückliche Menschen reicher.

  3. #3
    Maiden Maiden ist offline Mitglied Bronze
    Registriert seit
    Mar 2010
    Beiträge
    35
    Blog-Einträge
    1
    vielen dank für die antwort, aber eines habe ich noch nicht zu dieser funktion verstanden
    [CPP]
    ?
    Geändert von Maiden (24.03.10 um 15:05 Uhr)
     

  4. #4
    Avatar von Vereth
    Vereth Vereth ist offline Mitglied Brokat
    Registriert seit
    Nov 2009
    Ort
    Dortmund
    Beiträge
    372
    outbuffer ist der String, in den das Ergebnis hineingeschrieben werden soll, damit das aufrufende Programm die 'Zahlen' auch zurückgeliefert bekommt. Dazu wird erst der Ziffernstring in die lokale Variable btwPuffer geschrieben (btw = bitte wenden?), allerdings sind diese Ziffern dann in der verkehrten Reihenfolge (die Einer-Stelle steht links). In der zweiten Schleife werden die Ziffernzeichen dann in umgekehrter Reihenfolge in den outbuffer geschrieben; danach wird noch ein Stringende-Kennzeichen angehängt.
     
    Vielen Dank für die Nutzung des Bewerten- und Danke-Buttons

    Wenn man sieht, dass man einen anderen glücklich gemacht hat, ist die Welt um zwei glückliche Menschen reicher.

  5. #5
    Maiden Maiden ist offline Mitglied Bronze
    Registriert seit
    Mar 2010
    Beiträge
    35
    Blog-Einträge
    1
    und das stringende ordnet das ganze denn in der richtigen reihenfolge? also das *outbuffer=0?
     

  6. #6
    Avatar von Vereth
    Vereth Vereth ist offline Mitglied Brokat
    Registriert seit
    Nov 2009
    Ort
    Dortmund
    Beiträge
    372
    Nein, diese Anweisung dient nur dazu, das Stringende zu kennzeichnen, damit keine Chaossymbole mit ausgegeben werden. outbuffer wird innerhalb der for-Schleife immer weitergezählt (++outbuffer), und zeigt deswegen stets auf den nächsten freien Platz für ein neues Zeichen. btwPuffer wird von hinten her ausgelesen, denn die for-Schleife läuft von buffPos-1 bis 0.
     
    Vielen Dank für die Nutzung des Bewerten- und Danke-Buttons

    Wenn man sieht, dass man einen anderen glücklich gemacht hat, ist die Welt um zwei glückliche Menschen reicher.

  7. #7
    Maiden Maiden ist offline Mitglied Bronze
    Registriert seit
    Mar 2010
    Beiträge
    35
    Blog-Einträge
    1
    Danke Vereth, ich denke du wirst mein retter in letzter Not, wobei ich durch probieren sehr viele Erkenntnisse gewonnen habe,
    Geändert von Maiden (24.03.10 um 15:06 Uhr)
     

  8. #8
    Avatar von Vereth
    Vereth Vereth ist offline Mitglied Brokat
    Registriert seit
    Nov 2009
    Ort
    Dortmund
    Beiträge
    372
    Zu dezipart1:
    In der ersten while-Schleife zählt er beginn hoch, bis er am Stringende angekommen ist; das erkennt er am Nullzeichen, das jedes Stringende kennzeichnet. Dies ist die Schleife, die das macht:
    Code c:
    1
    2
    
    while( *c!=0)
    c=c+1;
    In der nachfolgenden do-Schleife zählt er diesen Zeiger wieder herunter, bis er wieder am Anfang angekommen ist, erkennbar am Vergleich (c != beginn). Er arbeitet den String also von hinten nach vorne ab, und bearbeitet dadurch zuerst die Einer-Stelle und danach die immer höherwertigen Stellen, bis er am Anfang angekommen ist.

    Zu dezipart2:
    Der Rückgabewert ist void, weil er das Ergebnis in den String schreibt, auf den der Parameter outbuffer zeigt. Dies kann man durchaus als Seiteneffekt bezeichnen. Es muss also kein Wert mit return zurückgeliefert werden, weil das Ergebnis in den vom aufrufenden Programm übergebenen String geschrieben wird. Deine Frage kann ich dir leider nicht beantworten, weil nicht erkennbar ist, worauf sie sich bezieht.

    PS: Normalerweise wird hier jeder geduzt, auch Du
     
    Vielen Dank für die Nutzung des Bewerten- und Danke-Buttons

    Wenn man sieht, dass man einen anderen glücklich gemacht hat, ist die Welt um zwei glückliche Menschen reicher.

  9. #9
    Maiden Maiden ist offline Mitglied Bronze
    Registriert seit
    Mar 2010
    Beiträge
    35
    Blog-Einträge
    1
    Besten dank nochmal velveth, ich komme echt weiter durch dir, habe auch viele Bücher bei c++ durchgelesen und bei [/CPP]
    Geändert von Maiden (24.03.10 um 15:06 Uhr)
     

  10. #10
    Avatar von Vereth
    Vereth Vereth ist offline Mitglied Brokat
    Registriert seit
    Nov 2009
    Ort
    Dortmund
    Beiträge
    372
    Diese Funktion ist tatsächlich eine Art Typumwandlung. Sie weist den Zeichen '0'-'9' den Wert 0-9 zu, und den Zeichen 'A'-'Z' den Wert 10-25.
     
    Vielen Dank für die Nutzung des Bewerten- und Danke-Buttons

    Wenn man sieht, dass man einen anderen glücklich gemacht hat, ist die Welt um zwei glückliche Menschen reicher.

  11. #11
    Maiden Maiden ist offline Mitglied Bronze
    Registriert seit
    Mar 2010
    Beiträge
    35
    Blog-Einträge
    1
    Ja super, um nochmal da sicher zu sein, bei chartyp 2 passiert das selbe nur das dies dann für die Ergebnisausgabe gilt und die erste natürlich bei der Eingabe, so nochmal ganz kurz zur logik, er hat das Int-Main wahrscheinlich nur aus Platzsparsamkeit nach hingesetzt, oder? ALso um sich die vorherige deklaration zu ersparen
     

  12. #12
    Avatar von Vereth
    Vereth Vereth ist offline Mitglied Brokat
    Registriert seit
    Nov 2009
    Ort
    Dortmund
    Beiträge
    372
    Ganz Richtig.
     
    Vielen Dank für die Nutzung des Bewerten- und Danke-Buttons

    Wenn man sieht, dass man einen anderen glücklich gemacht hat, ist die Welt um zwei glückliche Menschen reicher.

  13. #13
    Maiden Maiden ist offline Mitglied Bronze
    Registriert seit
    Mar 2010
    Beiträge
    35
    Blog-Einträge
    1
    So, ich hoffe erstmal das es die letzte frage ist für heute, zu dem folgendem teil nochmal, warum wir bei i-- vorher
    Geändert von Maiden (24.03.10 um 15:07 Uhr)
     

  14. #14
    Avatar von Vereth
    Vereth Vereth ist offline Mitglied Brokat
    Registriert seit
    Nov 2009
    Ort
    Dortmund
    Beiträge
    372
    Das beantworte ich dir, sobald du deinen Post so geändert hast, dass der Programm-Code in C-Tags steht:

    [ c ]
    hier kommt der Code rein
    [ /c ]

    PS: Die Leerzeichen innerhalb der eckigen Klammern musst du natürlich weglassen.
     
    Vielen Dank für die Nutzung des Bewerten- und Danke-Buttons

    Wenn man sieht, dass man einen anderen glücklich gemacht hat, ist die Welt um zwei glückliche Menschen reicher.

  15. #15
    Avatar von Vereth
    Vereth Vereth ist offline Mitglied Brokat
    Registriert seit
    Nov 2009
    Ort
    Dortmund
    Beiträge
    372
    Hast du gut gemacht, darfst du ab jetzt immer machen
    In diesem Fall ist es egal, ob du --i oder i-- schreibst, beide Male wird i um eins heruntergezählt (dekrementiert). Du solltest dir aber genau merken, was der Unterschied ist.
    Wenn du --i schreibst, wird erst i dekrementiert, und der dekrementierte Wert ist dann der Wert des Ausdrucks.
    Wenn du i-- schreibst, ist der ursprüngliche Wert der Variablen i der Wert des Ausdrucks, und erst dann wird i dekrementiert.
    Beispiel:
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    
    {
      int i;
      i = 10;
      printf("i: %d\n",i--); // gibt 10 aus
      i = 10;
      printf("i: %d\n",--i); // gibt 9 aus
    }
     
    Vielen Dank für die Nutzung des Bewerten- und Danke-Buttons

    Wenn man sieht, dass man einen anderen glücklich gemacht hat, ist die Welt um zwei glückliche Menschen reicher.

Ähnliche Themen

  1. bin->dez (mit basen > 2^32)
    Von HentaiD im Forum C/C++
    Antworten: 2
    Letzter Beitrag: 26.08.10, 13:33
  2. Beliebigen Quellcode ausführen
    Von hugamann im Forum Visual Basic 6.0
    Antworten: 1
    Letzter Beitrag: 29.12.05, 00:26
  3. Suche Liste von Air Force Basen
    Von newwarrior im Forum Smalltalk
    Antworten: 5
    Letzter Beitrag: 12.06.05, 19:06
  4. Glanz bei beliebigen Formen
    Von Loocie im Forum Photoshop
    Antworten: 9
    Letzter Beitrag: 16.12.04, 13:38
  5. Funktion mit beliebigen Zahlentypen
    Von Wolfsbein im Forum Java
    Antworten: 7
    Letzter Beitrag: 22.10.04, 22:34