#include <www.pronix.de>

 
Home

 Programmieren
C-Programmieren
Perl
CGI

 Bücher
C von A bis Z
+ Compiler
+ Listings
+ Aufgaben
+ Links
+ Updates
C M&T easy
Rezensionen

 Service
Links
Feedback
Mailingliste
Newsletter

 Sonstiges
FAQ
Impressum
 

Updates zum Buch

Auf dieser Seite finden Sie Fehler und Erweiterungen zum Buch.

Folgende Fehler wurde bisher hinzugefügt:

  • 3.3. Analyse des Programms (Seite 33)
    (..) int steht für eine Dezimal-Zahl (..)
    Das soll natürlich heißen:
    (..) int steht für eine Ganzzahl (..)
    Dieser Fehler kommt öfters vor. (Vielen Dank an M-A. Prowe für den Hinweis)
  • 6. Formatierte Eingabe mit scanf() (Seite 47)
    Mit der Funktion scanf() können Werte unterschiedlicher Datentypen formatiert eingelesen werden.(..) Das Wort "eingelesen" soll heißen "Eingelesen"
    (Vielen Dank an F. Gretz)
  • 8.13. Umwandlungsvorgaben für formatierte Ein/Ausgabe (Seite 84)
    Unter der Tabelle 8.11. steht: Typenbezeichner von Formatanweisungen
    Richtig währe:
    Typenbezeichner von Umwandlungszeichen. (Vielen Dank an M-A. Prowe für den Hinweis)
  • 12.14. Funktion mit Wertübergabe (call-by-value)
    Dies sollte natürlich heißen:
    12.14. Wertübergabe an Funktionen
  • 15.2 Zeiger initialisieren (Seite 268)
    ---schnipp---

    ptr=&var2; /* var bekommt den Wert von var2 (==100)*/

    printf("%d",*ptr); /* gibt Wert von var aus */
    printf("%p",&ptr); /* gibt Adresse von ptr aus */
    printf("%p",ptr) /* gibt Adresse von var aus */

    ---schnipp---

    In der ersten Zeile bekommt var NICHT den Wert von var2 sondern ptr zeigt auf var2. Damit ergibt sich für Zeile 2 und 4 daß der Wert bzw. die Adresse von var2 ausgegeben wird.
    (Vielen Dank für den Hinweis an Mathias)
  • 16.1. Argumente an die Hauptfunktion (Seite 304)
    ist bei Erläuterung von argv[] unter Abb.16.1 zu lesen: > In argv[0], dem ersten Argument, befindet sich immer der Programmname selbst. > Die einzelnen Argumente, die dem Programm übergeben werden, müssen immer mit mindestens > einer Leerzeile getrennt sein.

    der korrekheit halber: es ist wohl LeerZEICHEN gemeint ...
    (Vielen Dank für den Hinweis an Marion)
  • 17.8. Zweidimensionale dynamische Arrays (Seite 338/339)
    Anstatt ...
    matrix = (int **)malloc(zeile*sizeof(int));
    ... müsste im Listing und auf der nächsten Seite in der Erklärung folgendes stehen ...
    matrix = (int **)malloc(zeile*sizeof(int *));
    Dieser Fehler wird von den meisten Compilern und Systemen nicht bemerkt und fällt auch nicht auf, so lange im Programm der Typ int verwendet wird (da auf den meisten Systemen ein Zeiger und ein int, vier Bytes haben). Sobald allerdings andere Datentypen wie char, short, double eingesetzt werden, wird dies auf jeden Fall zu schwer auffindbaren Fehlern führen. (Vielen Dank an A. Freund für diesen Hinweis)
  • 22.1. Die Headerdatei <time.h> (Seite 548)
    Auf Seite 548 in dem Listing zu "mktime()" lautet die Ausgabe "Dieser Tag ist/wahr ein..." --- wobei es doch eigentlich schon "war" heißen sollte...
  • 25.3.4 Shellsort (Seite 670/671)
    Ein Fehler bei beiden Shellsort-Implementationen. Bei der Testreihe befindet sich die 0 am Anfang und daher arbeitet Shellsort nicht richtig (auch wenn es so aussieht). Hier die Version und Ausgabe, es wurde nur das zu sortierende Array geringfügig verändert:
    #include <stdio.h>
    
    void shellsort(int array[], int elemente)
    {
       int i,j,temp,n;
    
       n=elemente;
       for(; n>0; n/=3)    /*Distanzfolge für n */
          for(i=n+1; i<=elemente; i++)
             {
                temp=array[i];
                for(j=i; j> n && array[j-n]>temp; j-=n)
                   array[j]=array[j-n];
                array[j]=temp;
             }
    }
    
    int main()
    {
       int i;
       /*Das Array zum Sortieren*/
       int test_array[] = { 5, 0, 2, 7, 9, 1, 4, 3, 8, 6 };
       int N = sizeof(test_array)/sizeof(int);
    
       shellsort(test_array, N-1);
    
       for(i=0; i<N; i++)
          printf("%d ",test_array[i]);
       printf("\n");
       getchar ();
       return 0;
    }
    
    Die Ausgabe lautet:
    5 0 1 2 3 4 6 7 8 9 
    Hier die Version, unter gleichen Bedingungen, mit Kommentaren an den korrigierten Stellen:
    #include <stdio.h>
    
    void shellsort (int array[], int elemente) {
      int i, j, temp, n;
       /* Anfangswert für die Distanz errechnen */
      for ( n = 1; n <= elemente/9; n = 3*n+1);
      for (; n > 0; n /= 3) {
           for (i = n; i <= elemente; i++) {
               temp = array[i];
    /* Größer als temp und nicht elemente sowie >= und nicht >*/
               for ( j = i;
                     j >= n && array[j-n] > temp;
                     j -= n) {
                              array[j] = array[j-n];
                             }
               array[j] = temp;
             }
        }
    
    }
    
    int main()
    {
       int i;
       /*Das Array zum Sortieren*/
       int test_array[] = { 5, 0, 2, 7, 9, 1, 4, 3, 8, 6 };
       int N = sizeof(test_array)/sizeof(int);
    
       shellsort(test_array, N-1);
    
       for(i=0; i<N; i++)
          printf("%d ",test_array[i]);
       printf("\n");
       getchar ();
       return 0;
    }
    Die Ausgabe:
    0 1 2 3 4 5 6 7 8 9
    (Danke an Sascha Friedmann für den Hinweis)

Folgende Erweiterungen bzw. Ergänzungen gibt es bisher zum Buch:

  • 28.4.x MySQL Client-Programme mit dem Bloodshed-Dev C++ Compiler erstellen  (hier klicken).



 

 

© 2000 - 2003 Jürgen Wolf