zahlzuziffer



  • Abend

    könnte mir jemand diese Aufgabenstellung erklären..
    verstehe nicht, was von mir verlangt wird..

    Implementieren Sie eine Funktion char ZahlzuZiffer(int z, int b), die zu einer Zahl z < b das z-te Symbol der Folge ’0’,’1’,’2’,...,’9’,’A’,’B’,’C’,...,’Z’ zurückgibt. Ist z größer als b oder ist b größer als unser Zeichenvorrat (36), so soll ’x’ zurückgegeben werden.



  • Ist nicht lösbar, weil unterspezifiziert. Was, wenn z = b? Oder z < 0? Beginnen Folgen bei 0 oder 1?



  • Es gibt verschiedene Ansätze.

    Bei einem solltest du dich mal mit ASCII befassen.

    Bei einem weitern solltest du Arrays kennen.


  • Mod

    mark93666 schrieb:

    Abend

    könnte mir jemand diese Aufgabenstellung erklären..
    verstehe nicht, was von mir verlangt wird..

    Implementieren Sie eine Funktion char ZahlzuZiffer(int z, int b), die zu einer Zahl z < b das z-te Symbol der Folge ’0’,’1’,’2’,...,’9’,’A’,’B’,’C’,...,’Z’ zurückgibt. Ist z größer als b oder ist b größer als unser Zeichenvorrat (36), so soll ’x’ zurückgegeben werden.

    Du solltest keinen tieferen Sinn in der Aufgabe suchen, es geht einfach darum, dass du Kontrollstrukturen und Programmablauf verstehen und umsetzen kannst. Anhand einer Aufgabe, die du so garantiert nirgendwo gelöst im Internet finden kannst. Lies die Beschreibung mal ganz konzentriert durch, dann sollte klar werden, was verlangt wird. Ich gebe mal ein paar Beispiele:
    ZahlzuZiffer(0, 25) -> '0'
    ZahlzuZiffer(10, 56) -> 'x'
    ZahlzuZiffer(10, 11) -> 'A'
    ZahlzuZiffer(10, 9) -> 'x'
    ZahlzuZiffer(33, 10) -> 'x'
    ZahlzuZiffer(33, 35) -> 'Y'

    Dummerweise ist die Aufgabe undefiniert für den Fall z == b und/oder z < 0. Fehler in der Aufgabe oder Anregung zum Mitdenken?



  • Holtrio mark93666!

    Hier mal ein Vorschlag, den könnte man eventuell noch verfeinern:

    //Implementieren Sie eine Funktion char ZahlzuZiffer(int z, int b),
    // die zu einer Zahl z < b das z-te Symbol der Folge ’0’,’1’,’2’,...,’9’,’A’,’B’,’C’,...,’Z’ zurückgibt.
    //Ist z größer als b oder ist b größer als unser Zeichenvorrat (36), so soll ’x’ zurückgegeben werden.
    
    #include <stdio.h>
    
    // = ist ASCII Nr.: 48 ist '0' ASCII 57='9'
    // 'A'= 65, 'Z'= 90
    char ZahlzuZiffer(int z, int b)
    {
     char letter = 'x';
     if ((z < b ) && (b <= 36))
     {
      if ((z >= 0) && (z <= 9))
       letter = (char)(z + 48);
      if ((z >= 10) && (z <= 36))
       letter = (char)z + 55;
     }
    return letter;
    }
    
    int main()
    {
     int z, b;
     b = 36;
     printf("Zahl zu Ziffer\n");
     for (z = 0; z <= 36; z++)
      printf ("z=%d  b=%d  Ziffer= %c\n", z , b,  ZahlzuZiffer(z, b));
        return 0;
    }
    
    Hier eine Liste der Bedeutung der ASCII-Zeichen
    
    von 0 bis 32 als Steuerzeichen für Datenübertragung,
    
    Drucker, Bildschirmsteuerzeichen, usw.:
    
    00 NULL, no Operation, ..........NUL keine Operation
    01 Start of Heading .............SOH Vorspannanfang
    02 Start of Text ................STX Textanfang
    03 End of Text ..................ETX Textende
    04 End of Transmission ..........EOT Übertragungsende
    05 Enquiry ......................ENQ Stationsanruf
    06 Acknowledge ..................ACK Bestätigung
    07 Bell..........................BEL Klingel
    08 Backspace.....................BS Rückwärtsschritt
    09 HAT...........................Horizontal Tabulation
    10 Line Feed.................... LF Zeilenvorschub
    11 Vertical Tabulation VT
    12 Form Feed FF..................Formularvorschub, Schirmlöschen
    13 Carrige Return ...............CR Wagenrücklauf
    14 Shift out ....................SO Umschalten aus
    15 Shift in .....................SI Umschalten ein
    16 Data Link Escape..............DLE Austritt aus der Datenverbindung
    17 Device Control 1..............DC1 Gerätesteuerung 1
    18 Device Control 2..............DC2 Gerätesteuerung 2
    19 Device Control 3..............DC3 Gerätesteuerung 3
    20 Device Control 4..............DC4 Gerätesteuerung 4
    21 Negative Acknowledge .........NAK Fehlermeldung
    22 Synchronous Idle .............SYN Synchronisierung
    23 End of Transm.Block...........ETB Datenblockende
    24 Cancel .......................CAN ungültig
    25 End of Medium ................EM Datenträgerende
    26 Substitute ...................SUB Character Zeichen ersetzen
    27 Escape........................ESC Rücksprung
    28 File Separator................FS Filetrennung
    29 Group Separator...............GS Gruppentrennung
    30 Record Separator .............RS Untergruppentrennung
    31 Unit Separator ...............US Einheitentrennung
    32 Space ........................SP Leerschritt
    

    Die restlichen Zeichen von 33 bis 127 zeigt folgendes
    Mini-Programm an:

    /* A33to127.c
     * Zeigt die ASCII-Zeichen 33 bis 127 an
     */
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
    int i, b, c, d, e, f;
    
       printf("ASCII 33 bis 127\n");
     for ( i = 1; i <= 19; i++)
     {
      b = i + 32;
      printf("\n%3d %c",b,b );
      c = i + 51;
      printf("  %3d %c",c,c );
      d = i + 70;
      printf("  %3d %c",d,d );
      e = i + 89;
      printf("  %3d %c",e,e );
      f = i + 108;
      printf("  %3d %c",f,f );
     }
    
       return 0;
    }
    


  • char ZahlzuZiffer(int z, int b)
    { char *ziffern="0123456789abcdefghijklmnopqrstuvwxyz";
    
      if(z>=b || b>strlen(ziffern) )
        return 'X'
     else
        return ziffern[z];
    }
    

    ungetestet

    Verwende keine Magic Numbers.
    Wenn man mit 48 das Zeichen '0' meint, dann schreibt man auch einfach '0' .
    Und statt 55 dann 'A'-10.



  • DirkB schrieb:

    Verwende keine Magic Numbers

    Ox37 ist '7' und das ist auch gut so.



  • Das ist ASCII und Verwandte.



  • Hi!

    Dein Vorschlag ist besser!, warum sollte man mehr als 36 Zeichen implemeniteren wollen? Die Lösung mit dem Array bietet später die Möglichkeit zur Umwandlung
    von Zahl zu Ziffer bei verschiedenen Zahlensystemen. Bei direkter Ansprache wird
    so was viel zu kompliziert. Ist wahrscheinlich die nächste Aufgabe, die wartet.


Anmelden zum Antworten