Verständnisproblem Stringterminierung



  • Dir ist schon folgendes klar?

    '0' = 48
    '\0' =  0
      0  =  0
    

    (Angaben bezogen auf ASCII)



  • m0pf schrieb:

    Welche der folgenden Anweisungen wandelt den int Wert 5 in die Zeichenkonstante '5' um und legt diese in der char Variablen z ab?

    Die "Problemalternativen sind:
    a) z= 5 + '0'
    b) z= 5 + '\0'

    b) kann nicht stimmen, weil '\0' das gleiche ist wie 0, und Null dazuzählen ändert sicherlich nichts. Also a), das geht deshalb gut, weil C verlangt, dass die Zahlenwerte der Ziffern aussteigend und ohne Lücken angelegt sein müssen. '0' ist der Zahlenwert des Zeichens 0, also muss der Zahlenwert des Zeichens '5' um genau fünf grösser sein.


  • Mod

    Alle deine Antworten liegen in dem Unterschied zwischen 0 und '0' und '\0', den du noch nicht verstanden hast:
    0: Die Zahl 0, also der Wert Null, nicht das Zeichen auf dem Bildschirm sondern null, niente, nix, nada.
    '0': Die Ziffer 0, also das Zeichen.
    '\0': Das Zeichen mit dem Wert 0. Dies ist nicht die Ziffer 0, sondern in der Regel einfach gar kein Zeichen. Auch kein Leerzeichen, sondern wirklich gar nichts. Null, nada, niente, nix.

    Da in C Zeichen und Zahlen das gleiche sind, sind daher 0 und '\0' das gleiche. Ziffern hingegen sind etwas anderes. Die sind einfach nur eine Nummer in einem Zeichensatz ohne besondere Bedeutung. Das Zeichen '0' wäre zum Beispiel in ASCII der Wert 48. Das Zeichen '\0' ist hingegen der Wert 0 aus dem Zeichensatz, siehe oben.



  • µngbd schrieb:

    C verlangt, dass die Zahlenwerte der Ziffern aussteigend und ohne Lücken angelegt sein müssen.

    Quelle?



  • 0mgf schrieb:

    Quelle?

    Bashar. Aber ich hab mal in C99 nachgesehen, und das stimmt. Frag mich aber bitte nicht, wo das war.



  • Vielen Dank für eure Hilfe.
    Hab's dann jetzt gerafft 🙂

    Aber wenn wir schonmal dabei sind 😃 :

    Ich habe eine n x n Matrix (A) gegeben und einen Vektor X aus R^n.
    Wie viel Speicherplätze benötigt man, um A und X zu speichern?

    Die Antwort hier ist laut Dozent
    [n*(n+3)]/2

    Nur warum?
    Für die Matrix brauche ich doch n² Speicherplätze und für den Vektor n Speicherplätze also insgesamt doch n²+n oder?
    Oder habe ich vergessen was wichtiges zu beachten?



  • 0mgf schrieb:

    µngbd schrieb:

    C verlangt, dass die Zahlenwerte der Ziffern aussteigend und ohne Lücken angelegt sein müssen.

    Quelle?

    ISO/IEC 9899:1999 5.2.1 (3) schrieb:

    Both the basic source and basic execution character sets shall have the following members: the 26 uppercase letters of the Latin alphabet

    A    B    C    D    E    F    G    H    I    J    K    L    M
            N    O    P    Q    R    S    T    U    V    W    X    Y    Z
    

    the 26 lowercase letters of the Latin alphabet

    a    b    c    d    e    f    g    h    i    j    k    l    m
            n    o    p    q    r    s    t    u    v    w    x    y    z
    

    the 10 decimal digits

    0    1    2    3    4    5    6    7    8    9
    

    the following 29 graphic characters

    !    "    #    %    &    '    (    )    *    +    ,    -    .    /    :
            ;    <    =    >    ?    [    \    ]    ^    _    {    |    }    ~
    

    the space character, and control characters representing horizontal tab, vertical tab, and form feed. The representation of each member of the source and execution basic character sets shall fit in a byte. In both the source and execution basic character sets, the value of each character after 0 in the above list of decimal digits shall be one greater than the value of the previous. In source files, there shall be some way of indicating the end of each line of text; this International Standard treats such an end-of-line indicator as if it were a single new-line character. In the basic execution character set, there shall be control characters representing alert, backspace, carriage return, and new line. If any other characters are encountered in a source file (except in an identifier, a character constant, a string literal, a header name, a comment, or a preprocessing token that is never converted to a token), the behavior is undefined.



  • Vielen Dank. Ist das erst ab C99 so?



  • Was ist ein Vektor X aus R^n?



  • Ich habe den C89-Standard nicht hier, aber es sollte mich sehr wundern. In C++98 verhält sich das genauso, und ich nehme an, dass die das von C89 übernommen haben.

    Zur Zeit der Standardisierung von C dürfte man dabei vor allem an ASCII und EBCDIC gedacht haben, die die Bedingung beide erfüllen, und Unicode übernimmt den relevanten Teil von ASCII - so oder so ist mir keine Implementation von C bekannt, die es anders macht, und Neuentwicklungen dürften sich an den C99-Standard gebunden fühlen. Praktisch kann man sich auf den c - '0'-Trick verlassen.



  • Kennst du $$\mathbb{R}^2$$? Das ist der zweidimensionale Raum.



  • xausrn schrieb:

    Kennst du $$\mathbb{R}^2$$? Das ist der zweidimensionale Raum.

    Und R^n ist dann ein n-dimensionaler Raum?
    -> d.h. der n-Dimensionale Vektor enthält n Koordinaten?



  • Korrekt.

    Jetzt verstehst du auch, wieso die Matrix eine n x n Matrix ist.
    Ausserdem verstehst die Überlegung von m0pf "Für die Matrix brauche ich doch n² Speicherplätze und für den Vektor n Speicherplätze"
    (d.h. du hättest auch selber auf den Verdacht kommen können)

    Warum der Dozent aber weniger als n² Speicherplätze für beide benötigt, kann ich nicht sagen.



  • xausrn schrieb:

    Korrekt.

    Jetzt verstehst du auch, wieso die Matrix eine n x n Matrix ist.
    Ausserdem verstehst die Überlegung von m0pf "Für die Matrix brauche ich doch n² Speicherplätze und für den Vektor n Speicherplätze"
    (d.h. du hättest auch selber auf den Verdacht kommen können)

    Warum der Dozent aber weniger als n² Speicherplätze für beide benötigt, kann ich nicht sagen.

    Schön, dass du weißt, was ich verstehe 😃
    Ich weiß aber immer noch nicht, wozu der Dozent die Matrix braucht und wozu sie n x n groß sein muss und nicht n x 5.


Anmelden zum Antworten