Erklärung eines leichten Qeullcodes C++ für Noob



  • Moin!
    Hab da von meinem Lehrer ne bekloppte Aufgabe bekommen, eine Programm (c++) zu kommentieren. Das Problem bei der Geschichte ist, das selbst mein Lehrer ne 1/2 std gebraucht hat um wenigstens mir mal zu zeigen wozu es dienen soll LoL. Das ist vom Prinzip her nen Rechner der aus einem mitgegebenen Wert das Binär, Oktät oder Hex ausrechnet und es dann ausgibt. Soweit sogut, leider konnten mir selbst die besten in C++ aus meiner Klasse net erläutern, was für was zuständig ist. Ich möchte hier mal jemanden höfflichst bitten, mir die Funktionsweise der einzelnen Schritte zu erläutern. Wäre sehr verbunden 😉 Es ist Teilweise schon kommentiert und als ich dann mich mal an die Erklärung von "main(int argc, char *argv[])" gemacht habe, ist mir das alles zu bunt geworden, das versteht doch keiner der bis jetzt mal grade nen Taschenrechner mit -,+,*,/ geschrieben hat.

    Vielen Dank, hoffe das hier jemand n Herz für geqäualte Nooby Schüler hat...

    Hier mal das Prog:

    /* chsys gibt fr eine als Kommandoparameter eingebene positive ganze dezimale
    Zahl wahlweise ihr bin?res, oktales oder hexadezimales ?quivalent aus
    Programmaufruf-Beispiel: chsys 100 hex */

    #include <stdio.h>
    #include <string.h>                                        /* strcmp */
    #include <stdlib.h>                                        /* atol, exit */
    
    main(int argc, char *argv[])
     {
     int i;
     long num;
    
     if (argc != 3)                                      /* Falsche Parameterzahl */
      {
       printf("\n\nSyntax: chsys zahl system");
       exit(1);
      }
     else
      {
       num = atol(argv[1]); /* Konvertieren */
       if (!strcmp("bin", argv[2])) /* bin?r */
        {
         if (num > 65535)                                     /* 4 Bytes */
          {
           printf("\n\nDie Eingabezahl lautet bin?r:\n\n\t");
           for (i = 31; i >= 0; i--)
            {
             printf("%d", (num >> i) & 1);
              if (!(i%8))
              printf(" ");
            }
          }
         else                                                 /* 2 Bytes */
          {
           printf("\n\nDie Eingabezahl lautet bin?r:\n\n\t");
           for (i = 15; i >= 0; i--)
            {
             printf("%d", (num >> i) & 1);
             if (!(i%8))
              printf(" ");
            }
           }
        }
        else if (!strcmp("okt", argv[2]))                    /* oktal */
         printf("\n\nDie Eingabezahl lautet oktal: %lo", num);
        else if (!strcmp("hex", argv[2]))                    /* hexadezimal */
         printf("\n\nDie Eingabezahl lautet hexadezimal: %lx", num);
        else
         printf("\n\nFalsches Zahlensystem.");
       }                                                     /*Ende oberstes else */
     }
    


  • Dieser Thread wurde von Moderator/in CMatt aus dem Forum C# und .NET in das Forum ANSI C verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • /*  chsys gibt für eine als Kommandozeilenargumente angegebene positive,
     *  ganze Dezimalzahl wahlweise ihr binäres, oktales oder hexadezimales
     *  Equivalent aus.
     *
     *  Programmaufruf-Beispiel: chsys 100 hex
     */
    
    #include <stdlib.h>   // exit( ), atol( )
    #include <stdio.h>    // printf( )
    #include <string.h>   // strcmp( )
    
    /*  Main Entry Point
     *  
     *  Parameters:
     *
     *    argc:    argument counter ( one-based )
     *    argv:    given arguments starting at *argv[ 1 ]
     *             ( *argv[ 0 ] is the name of the program )
     */
    int main( int argc, char *argv[ ] )
    {
        int i, max;
        long num;
    
        if( argc != 3 ) { // exactly three argumands should be passed
    
            // give the user a hint
            printf("\n\nSyntax: chsys zahl system");
    
            // exit with error code 1
            exit( 1 );
    
        } else {
    
            // convert the first argument from an C-String to long
            num = atol( argv[ 1 ] );
    
            if( strcmp( "bin", argv[2] ) == 0 ) { // convert to bin
    
                if( num > 65535 ) {
                    max = 31; // 4 bytes
                } else {
                    max = 15; // 2 bytes
                }
    
                printf("\n\nDie Eingabezahl lautet binär:\n\n\t");
    
                // print max bits, beginning with the most significant
                for( i = max; i >= 0; i-- ) {
    
                    // shift bit i to bit 0 and test if it is set.
                    //
                    // eg:              num = 11001001001011011100100100110001
                    //                    i = 10
                    //             num >> i = 00000000001100100100101101110010
                    //     ( num >> i ) & 1 = 0
                    //
                    printf("%d", (num >> i) & 1);
    
                    // group output to 8 bits a block
                    if( !( i % 8 ) )
                        printf(" ");
                }
            }
        } else if( strcmp( "okt", argv[ 2 ] ) == 0 ) { // convert to octal
    
            // use printf's format flags to print octal
    
            printf( "\n\nDie Eingabezahl lautet oktal: %lo", num );
    
        } else if( strcmp( "hex", argv[ 2 ] ) == 0 ) { // convert to hexadecimal
    
            // use printf's format flags to print hexadecimal
    
            printf( "\n\nDie Eingabezahl lautet hexadezimal: %lx", num );
    
        } else { // if argv[ 2 ] does not match either "bin", "oct" or "hex"
                 // print an error message.
    
            printf("\n\nFalsches Zahlensystem.");
        }
    }
    

    Greetz, Swordfish



  • schreib doch auf deutsch, ich denk mal da machst du weniger fehler



  • Disclaimer: All spelling mistakes found in my posts may be interpreted as the authors’ creative use of the language.

    Greetz, Swordfish



  • Hi! Genial das hier jemand überhaupt mühe gibt für nen Nooby 😉 Schon mal Special THX! Ok, jetzt muss ich die Kommentare nur noch verstehen, dabei scheiter ich grade kläglich... und auf deutsch ausschmücken. Falls jemand nochmal seinen etwas aufklärenderen Senf dazu geben möchte, wär ich sehr dankbar. So ganz raff ich das immer noch net. Ich glaub ich hätte bei Batch dateien bleieben sollen... 🤡
    THX!!!



  • /*  chsys gibt fü�r eine als Kommandozeilenargumente angegebene positive, 
     *  ganze Dezimalzahl wahlweise ihr binäres, oktales oder hexadezimales 
     *  Equivalent aus. 
     * 
     *  Programmaufruf-Beispiel: chsys 100 hex 
     */ 
    
    #include <stdlib.h>   // benutzte Funktionen: exit( ), atol( ) 
    #include <stdio.h>    // benutzte Funktionen: printf( ) 
    #include <string.h>   // benutzte Funktionen: strcmp( ) 
    
    /*  Einsprungpunkt der main-Funktion
     *   
     *  Parameter: 
     * 
     *    argc:    Argumenten-Zähler ( Auf eins basierend ) 
     *    argv:    Die gegebenen Argumente, bei *argv[ 1 ] angefangen
     *             ( *argv[ 0 ] ist der Name des Programms) 
     */ 
    int main( int argc, char *argv[ ] ) 
    { 
        int i, max; 
        long num; 
    
        if( argc != 3 ) { // genau 3 Argumente sollen übergeben werden, den
                          // Programmnamen eingeschlossen
            // Den Benutzer über die Syntax informieren
            printf("\n\nSyntax: chsys zahl system"); 
    
            // Mit Fehlercode 1 beenden.
            exit( 1 ); 
    
        } else { 
    
            // Das erste Argument in einen long umwandeln
            num = atol( argv[ 1 ] ); 
    
            if( strcmp( "bin", argv[2] ) == 0 ) { // das zweite Argument in einen
                                                  // Binär-Wert umwandeln
                if( num > 65535 ) { 
                    max = 31; // 4 bytes 
                } else { 
                    max = 15; // 2 bytes 
                } 
    
                printf("\n\nDie Eingabezahl lautet binär:\n\n\t"); 
    
                // Die Maximale Anzahl bits ausgeben, beginnend mit dem höchsten
                // Wert
                for( i = max; i >= 0; i-- ) { 
    
                    // bit i auf bit 0 verschieben und testen ob es gesetzt ist
                    // 
                    // z.B.:            num = 11001001001011011100100100110001 
                    //                    i = 10 
                    //             num >> i = 00000000001100100100101101110010 
                    //     ( num >> i ) & 1 = 0 
                    // 
                    printf("%d", (num >> i) & 1); 
    
                    // die Ausgabe in 8 Bit-Blocks gruppieren
                    if( !( i % 8 ) ) 
                        printf(" "); 
                } 
            } 
        } else if( strcmp( "okt", argv[ 2 ] ) == 0 ) { // in Oktalzahl umwandeln
    
            // die format-flags von printf benutzen um die Zahl oktal darzustellen
    
            printf( "\n\nDie Eingabezahl lautet oktal: %lo", num ); 
    
        } else if( strcmp( "hex", argv[ 2 ] ) == 0 ) { // in Hexadezimalzahl umwandeln
    
            // die format-flags von printf benutzen um die Zahl hexadezimal darzustellen
    
            printf( "\n\nDie Eingabezahl lautet hexadezimal: %lx", num ); 
    
        } else { // wenn argv[ 2 ] weder Binär, noch Oktal oder Hexadezimal ist
                 // wird eine Fehlermeldung ausgegeben
    
            printf("\n\nFalsches Zahlensystem."); 
        } 
    }
    

    Edit: erstmal die Hälfte übersehen und dann auch noch Rechtschreibfehler gemacht...



  • Verdammt! Genial!
    Besten Dank euch allen! Habt mir die Haut gerettet 🙂
    Das liegt immer noch weit über meinem Horizont, weiß nicht was sich mein Lehrer dabei gedacht hat. Aber das was nun bei raus gekommen ist, ist mehr als ich überhaupt erhofft habe 🙂
    Also nochmal besten Dank für die fixe hilfe!
    MfG Nooby


Anmelden zum Antworten